如何解决此碰撞检测?

时间:2018-08-10 09:29:22

标签: java javafx collision

我正在尝试用JavaFX创建一个简单的Space Invaders游戏。这是我的第一次,所以我不知道您如何正确执行此操作。我正在尝试添加碰撞检测,以删除一个被子弹击中的精灵。

我所有的精灵都是带有imagePattern的矩形。

敌人是60 x 43,子弹是4 x8。我的想法是仅检查子弹是否在sprite的translateX内,以及是否相同的Translate Y-其高度。但是由于某种原因,此代码无法正常工作。当子弹击中精灵时,它会导致Exception in thread "JavaFX Application Thread" java.lang.NullPointerException

if (game.lookup("#bullet") != null) {
    for (Sprite sprite : enemies) {
        if (game.lookup("#bullet").getTranslateX() >= sprite.getTranslateX() && game.lookup("#bullet").getTranslateX() <= sprite.getTranslateX() + 60 && game.lookup("#bullet").getTranslateY() == sprite.getTranslateY() - 43) {
            System.out.println("HIT!");
        }
    }
}

一些帮助将不胜感激。

注意:我确信这不是解决问题的最有效方法,而是我唯一的想法。

堆栈跟踪:

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at Main$1.handle(Main.java:131)
at javafx.graphics/javafx.animation.AnimationTimer$AnimationTimerReceiver.lambda$handle$0(AnimationTimer.java:57)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.graphics/javafx.animation.AnimationTimer$AnimationTimerReceiver.handle(AnimationTimer.java:56)
at javafx.graphics/com.sun.scenario.animation.AbstractMasterTimer.timePulseImpl(AbstractMasterTimer.java:357)
at javafx.graphics/com.sun.scenario.animation.AbstractMasterTimer$MainLoop.run(AbstractMasterTimer.java:267)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:514)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:498)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue(QuantumToolkit.java:491)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$11(QuantumToolkit.java:319)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:175)
at java.base/java.lang.Thread.run(Thread.java:844)

1 个答案:

答案 0 :(得分:1)

您的“项目符号”键之一似乎缺少其“#”。