我正在制作一款游戏,它是 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
的线程中,我不断调用 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)
这告诉我,当我在 move()
方法中调用 setYOff()
方法时,它不起作用。我尝试过测试并将设置 Y 偏移量的调用移动到线程本身中,并且它给出了相同的错误...然后我尝试将其移动到 RefreshThread
,有趣的是它确实如此工作...它每 20 毫秒将整个 map 向下移动 1 像素...我不知道为什么!我的 move 方法出了什么问题,导致它不起作用,或者更好的是,我的 PlayerThread ,从长远来看,这并不能使它起作用?我的 RefreshThread
有什么不同?如果你们需要涉及每个线程的调用、创建等所有内容的完整代码,我可以提供,但我不确定你们是否需要......我需要做什么不同的事情?提前致谢!
编辑:我尝试在我的PlayerThread
中只是注释掉move()
调用,并让它调整y偏移量,成功了!所以这与 move 方法有关,但是为什么呢?
对先前编辑的更正:因此进行更多测试,我将 move()
调用放回到线程中,并保留 setYOff(1)
code> 在其中,它仍然有效,但同样不是来自 move 方法本身......
最佳答案
NullPointerException
指示调用该方法的对象为 Null
,在本例中为 core
对象。解决这个问题,问题就会消失。
关于2D 滚动游戏的 Java nullpointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16682490/