用于2D滚动游戏的Java nullpointerexception

时间:2013-05-22 02:25:01

标签: java multithreading methods nullpointerexception 2d

我正在制作游戏,它的2D侧滚动,有点像terraria。在我的游戏中,我有偏移,XOffYOff,这些移动了地形。我的角色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的线程中,我不断调用move()和另一个名为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个像素......我不知道为什么!我的移动方法有什么不对,这使得这个不起作用,或者更好,我的PlayerThread,从长远来看这不是很有效吗?我的RefreshThread有什么不同?如果你们需要整个代码来处理涉及调用,创建等每个线程的所有内容,我可以提供,但我不确定你是否需要...我需要做些什么呢?提前谢谢!

编辑:我尝试在我的PlayerThread中发表评论move(),只是让它调整y偏移量,然后就可以了!所以它与移动方法有关,但同样,为什么呢?

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

1 个答案:

答案 0 :(得分:2)

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