1

我正在用 Java 制作游戏,并且我有一个中央(引擎)类,它将渲染风景/播放器/等。

在 Engine 类中,我像这样创建我的播放器对象

public class Engine() {

    public static Player player;

    public Engine() {
        RenderPlayer();
    }

    protected static void RenderPlayer() {
        player = new Player();
    }
}

我还有一个处理播放器绘图的 Canvas 类。我希望能够调用 Players 函数而无需创建新实例(因为我在 Engine 类中创建了播放器)。每当我尝试使用播放器中的函数时,都会收到空指针预期。

我就是这样称呼它的。

Engine.player.tick();

我花了几个小时试图弄清楚,有人可以告诉我我做错了什么,并帮助我朝着正确的方向前进吗?谢谢你。

4

2 回答 2

1

如果您从未创建过 Engine 的实例,则 player 为 null,因为RenderPlayer()它位于 Engine 的构造函数中。

你可以做

public static Player player = new Player();

或确保RenderPlayer()在访问播放器之前显式调用。

于 2013-05-22T01:03:49.703 回答
1

您需要调用Engine.RenderPlayer()之前的调用Engine.player.tick();,因为此方法将新Player实例分配给静态player属性。在您调用此方法之前player为 null,它会导致您的NullPointerException.

您只需更改以下内容即可解决此问题:

public static Player player;

至:

public static Player player = new Player();
于 2013-05-22T01:03:11.910 回答