Java 使用gdx render()方法处理libgdx的NullPointerException
开始做游戏。 这是我的一些代码Java 使用gdx render()方法处理libgdx的NullPointerException,java,desktop-application,desktop,libgdx,Java,Desktop Application,Desktop,Libgdx,开始做游戏。 这是我的一些代码 package games.tribe.screens; import games.tribe.model.World; import games.tribe.view.WorldRenderer; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Screen; import com.badlogic.gdx.graphics.GL10; public class GameScreen impleme
package games.tribe.screens;
import games.tribe.model.World;
import games.tribe.view.WorldRenderer;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.GL10;
public class GameScreen implements Screen {
private World world;
private WorldRenderer renderer;
/** This was the bit I'd missed --------------------------------------**/
@Override
public void show() {
world = new World();
renderer = new WorldRenderer(world);
}
/**------------------------------------------------------------------**/
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0.1f, 0.1f, 0.1f, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
renderer.render();
}
@Override
public void resize(int width, int height) {
// TODO Auto-generated method stub
}
@Override
public void hide() {
// TODO Auto-generated method stub
}
@Override
public void pause() {
// TODO Auto-generated method stub
}
@Override
public void resume() {
// TODO Auto-generated method stub
}
@Override
public void dispose() {
// TODO Auto-generated method stub
}
}
以下是WorldRenderer类:
package games.tribe.view;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;
import com.badlogic.gdx.math.Rectangle;
import games.tribe.model.Block;
import games.tribe.model.TribalHunter;
import games.tribe.model.World;
public class WorldRenderer {
private World world;
private OrthographicCamera cam;
/**for debug rendering**/
ShapeRenderer debugRenderer = new ShapeRenderer();
public WorldRenderer(World world) {
this.world = world;
this.cam = new OrthographicCamera(10, 7);
this.cam.position.set(5, 3.5f, 0);
this.cam.update();
}
public void render() {
//render blocks
debugRenderer.setProjectionMatrix(cam.combined);
debugRenderer.begin(ShapeType.Rectangle);
for(Block block : world.getBlocks()) {
Rectangle rect = block.getBounds();
float x1 = block.getPosition().x + rect.x;
float y1 = block.getPosition().y + rect.y;
debugRenderer.setColor(new Color(1, 0, 0, 1));
debugRenderer.rect(x1, y1, rect.width, rect.height);
}
//render hunter
TribalHunter hunter = world.getHunter();
Rectangle rect = hunter.getBounds();
float x1 = hunter.getPosition().x + rect.x;
float y1 = hunter.getPosition().y + rect.y;
debugRenderer.setColor(new Color(0, 1, 0, 1));
debugRenderer.rect(x1, y1, rect.width, rect.height);
debugRenderer.end();
}
}
这是作为桌面应用程序运行时遇到的异常:
Exception in thread "LWJGL Application" java.lang.NullPointerException
at games.tribe.screens.GameScreen.render(GameScreen.java:19)
at com.badlogic.gdx.Game.render(Game.java:46)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:202)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:131)
AL lib: ReleaseALC: 1 device not closed
gdx.Game.render的第46行是此方法:
@Override
public void render () {
if (screen != null) screen.render(Gdx.graphics.getDeltaTime());
}
任何帮助都将不胜感激
提前感谢在
GameScreen
的render()
方法中,渲染器
是否已初始化?如果没有,这可能会导致问题
编辑:根据错误的前两行,您遇到的问题是类游戏屏幕第19行上的NullPointerException
。NullPointerException
仅在对象本身为null
时用于某些操作时发生,因为它可能尚未初始化
游戏屏幕的第19行是:
renderer.render();
…但是对象渲染器
尚未在任何位置初始化,因此它当前为null
,这是默认值。为了避免出现此错误,您需要在运行该行代码之前初始化渲染器
对象。也许是这样的:
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0.1f, 0.1f, 0.1f, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
renderer = new WorldRenderer();
renderer.render();
}
我不熟悉libgdx,所以我不能确定WorldRenderer
是如何初始化的,但是您需要做一些类似的事情。我希望这会有所帮助。我以为所有的东西都已正确初始化。我编辑了代码以显示这两个类的全部代码。哦,当然!你是对的:)草签了他们(见编辑的问题)啊,我刚看到你在我编辑后就明白了。哦,我希望你喜欢这个过于详细的解释。很高兴我能帮忙。