我正在制作游戏,它的2D侧滚动,有点像terraria。在我的游戏中,我有偏移,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)
这告诉我,当我在setYOff()
方法中调用move()
方法时,它无效。我试过测试并移动调用以将Y偏移设置到线程本身,并且它给出了相同的错误......然后我尝试将其移动到RefreshThread
,有趣的是它确实有效...它每20毫秒将整个地图向下移动1个像素......我不知道为什么!我的移动方法有什么不对,这使得这个不起作用,或者更好,我的PlayerThread
,从长远来看这不是很有效吗?我的RefreshThread
有什么不同?如果你们需要整个代码来处理涉及调用,创建等每个线程的所有内容,我可以提供,但我不确定你是否需要...我需要做些什么呢?提前谢谢!
编辑:我尝试在我的PlayerThread
中发表评论move()
,只是让它调整y偏移量,然后就可以了!所以它与移动方法有关,但同样,为什么呢?
更正以前的编辑:所以测试更多,我将move()
调用回到线程中,并将setYOff(1)
保留在其中,它仍然有效,但是再次不是来自移动方法本身......
答案 0 :(得分:2)
NullPointerException
表示调用该方法的对象是Null
,在本例中是core
对象。解决这个问题,问题应该消失。