Java Libgdx NullPointerException
我正在尝试用libgdx制作一个简单的动画,里面有一张精灵纸,一个正在移动双腿的瘦小男人。代码如下:Java Libgdx NullPointerException,java,android,animation,libgdx,Java,Android,Animation,Libgdx,我正在尝试用libgdx制作一个简单的动画,里面有一张精灵纸,一个正在移动双腿的瘦小男人。代码如下: package com.pro.schoolrun; import com.badlogic.gdx.ApplicationListener; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.GL10; import com.badlogic.gdx.graphics.OrthographicCamera; impor
package com.pro.schoolrun;
import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
public class SchoolRun implements ApplicationListener {
Texture player;
TextureRegion[] regions;
SpriteBatch batch;
OrthographicCamera camera;
int i;
@Override
public void create() {
i = 0;
player = new Texture(Gdx.files.internal("data/spritesheet.png"));
regions[0] = new TextureRegion(player, 0, 0, player.getWidth() / 4,
player.getHeight() / 2);
regions[1] = new TextureRegion(player, 64, 0, player.getWidth() / 4,
player.getHeight() / 2);
regions[2] = new TextureRegion(player, 128, 0, player.getWidth() / 4,
player.getHeight() / 2);
regions[3] = new TextureRegion(player, 192, 0, player.getWidth() / 4,
player.getHeight() / 2);
regions[4] = new TextureRegion(player, 0, 128, player.getWidth() / 4,
player.getHeight() / 2);
regions[5] = new TextureRegion(player, 64, 128, player.getWidth() / 4,
player.getHeight() / 2);
regions[6] = new TextureRegion(player, 128, 128, player.getWidth() / 4,
player.getHeight() / 2);
regions[7] = new TextureRegion(player, 192, 128, player.getWidth() / 4,
player.getHeight() / 2);
camera = new OrthographicCamera();
camera.setToOrtho(false, 800, 400);
batch = new SpriteBatch();
}
@Override
public void dispose() {
player.dispose();
batch.dispose();
}
@Override
public void render() {
Gdx.gl.glClearColor(0, 0, 0.2f, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
camera.update();
batch.setProjectionMatrix(camera.combined);
while (true) {
batch.begin();
if (i > 7) {
i = -1;
i++;
} else {
i++;
}
batch.draw(regions[i], Gdx.graphics.getWidth() / 2,
Gdx.graphics.getHeight() / 2);
batch.end();
}
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
}
但当我在android上运行它时,它在第24at行[0]处给了我一个空指针异常。这是MainActivity类:
package com.pro.schoolrun;
import android.os.Bundle;
import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
public class MainActivity extends AndroidApplication {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();
cfg.useGL20 = true;
cfg.useAccelerometer=false;
cfg.useCompass = false;
initialize(new SchoolRun(), cfg);
}
}
您从不初始化区域数组:
这应该是
TextureRegion[] regions = new TextureRegion[8];
这应该可以解决以下问题空指针异常意味着您正在尝试使用尚未初始化的内容。对象、数组和变量在使用前必须初始化/赋值 在本例中,您尝试使用名为regions的TextureRegion数组,但尚未初始化。可以按如下方式初始化阵列:
region = new TextureRegion[8];
其中8是数组的大小。
在使用region之前必须调用此语句。当图像文件为空时,会发生NullPointerException。这意味着在此目录中找不到图像文件 确保在正确的位置找到您的图像 在您的情况下,您的图像应位于 包含项目/SchoolRun/android/assets/data的目录 或者将代码更改为
player = new Texture(Gdx.files.internal("spritesheet.png"));
希望你成功:好,这就解决了问题!现在我必须找出为什么我的模拟器的屏幕是空白的!需要注意的一点是,在渲染方法中不需要while循环。它是自动调用的。我不同意。当找不到文件时,LibGdx抛出com.badlogic.gdx.utils.GdxRuntimeException。当您使用尚未初始化的内容时,将引发NullPointerException。
region = new TextureRegion[8];
player = new Texture(Gdx.files.internal("spritesheet.png"));