【问题标题】:NullPointerException with libgdx using the gdx render() method使用 gdx render() 方法的 libgdx 出现 NullPointerException
【发布时间】:2012-06-27 03:39:28
【问题描述】:

开始制作游戏。 这是我的一些代码。

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());
}

任何帮助将不胜感激

提前致谢

【问题讨论】:

    标签: java desktop-application desktop libgdx


    【解决方案1】:

    GameScreenrender()方法中,renderer是否被初始化了?如果没有,这可能会导致问题。

    编辑:根据错误的前两行,您遇到的问题是 NullPointerException 在线 19 的类 GameScreenNullPointerException 仅在对象本身为 null 时用于某些操作时出现,因为它可能尚未初始化。

    GameScreen 的行19 是:

    renderer.render();
    

    ...但是对象renderer 没有在任何地方初始化,所以它当前是null,这是默认值。为避免出现此错误,您需要在运行该行代码之前初始化 renderer 对象。也许是这样的:

    @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 的初始化方式是这样的,但你需要做一些类似的事情。我希望这会有所帮助。

    【讨论】:

    • 我以为一切都已正确初始化。我已经编辑了代码以显示两个类的完整代码。
    • 哦,当然!你是对的 :) 初始化它们(见编辑问题)
    • 啊,我刚刚看到你在我编辑后想通了。哦,好吧,我希望你喜欢这个过于详细的解释。很高兴我能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    相关资源
    最近更新 更多