2D 滚动游戏的 Java nullpointerException

标签 java multithreading methods nullpointerexception 2d

我正在制作一款游戏,它是 2D 横向卷轴,有点像泰拉瑞亚。在我的游戏中,我有偏移量,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)

这告诉我,当我在 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/

相关文章:

java - 如何为枚举实现 JSR-303

parsing - 如何以编程方式将 Java 代码(方法)解析为控制流图

java - `thenRunAsync(...)` 和 `CompletableFuture.runAsync(() -> { ... });` 有关联吗?

java - “变量”不能解析为变量

java - Jasper报路径问题,在App server上运行找不到.jasper文件

java - 向 Maven 3 添加额外的存储库

multithreading - 在什么意义上,每个线程对于操作系统来说都是一个单独的 CPU?

Python 多线程与多处理与顺序执行

java - 如何在 java ArrayList<Long> 中进行二进制搜索?

objective-c - 如何访问某些方法的 Objective C 未命名参数?