0

我正在制作一个游戏,它的 2D 横向滚动,有点像泰拉瑞亚。在我的游戏中,我有偏移量,XOff并且YOff, 和移动地形。我也有一个适合我的角色的方法move(),而所做的就是:

public void move() {
        if (!ableToMove) //makes sure you can move
            return;
        // x += moveX; these 2 methods work, but x and y are just my player coords.
        // y += moveY;
        core.setYOff(1); //core is my main class, where the global variables are stored
    }

注释标签并描述每个变量。因此, setYOff(1) 设置YOff如下:

private void setYOff(int i){
     YOff += i;
}

现在,只有一种方法可以访问该move方法。在一个名为 的线程中PlayerThread,我不断调用 themove()和另一个名为 的方法applyGravity(),这与这个问题并没有真正的关系。那是在PlayerThread.

现在这是我遇到的问题......当我打电话时setYOff(),我收到以下错误:

Exception in thread "player Thread" java.lang.NullPointerException
    at main.Player.move(Player.java:33)
    at main.PlayerThread.run(PlayerThread.java:24)
    at java.lang.Thread.run(Unknown Source)

这告诉我,当我setYOff()在我的方法中调用该方法时move(),它不起作用。我试过只是测试并将调用设置 Y 偏移量到线程本身,它给出了同样的错误......然后我试图将它移动到RefreshThread,有趣的是它确实有效......它移动了整个每 20 毫秒向下映射 1 个像素……我不知道为什么!我的 move 方法有什么问题导致它不起作用,或者更好的是,我PlayerThread的,从长远来看不能使它起作用?我的有什么不同RefreshThread?如果你们需要涉及每个线程的调用、创建等所有内容的整个代码,我可以提供,但我不确定你们是否需要...我需要做些什么不同的事情?提前致谢!

编辑:我试过了,在我PlayerThread刚刚注释掉move()调用时,只是让它调整 y 偏移量,它起作用了!所以它与 move 方法有关,但是,为什么?

更正以前的编辑:所以测试更多,我将move()调用放回线程中,并保留setYOff(1)在其中,它仍然有效,但又不是来自 move 方法本身......

4

1 回答 1

2

表示调用该NullPointerException方法的对象是Null,在本例中为core对象。解决这个问题,问题应该会消失。

于 2013-05-22T02:37:36.017 回答