我正在制作一个游戏,它的 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 方法本身......