Java ufo游戏中的碰撞检测

Java ufo游戏中的碰撞检测,java,collision-detection,collision,stanford-nlp,Java,Collision Detection,Collision,Stanford Nlp,我有一个简单的Java游戏,你可以向一个移动的目标发射子弹。两个物体都是灰色的。我有碰撞检测,可以检测不明飞行物和子弹何时相交,但奇怪的是: 这项工作: private void collideWithUFO() { if (bullet != null) { GObject collObj = getElementAt(ufo.getX(), ufo.getY()); if (collObj == bullet) { remo

我有一个简单的Java游戏,你可以向一个移动的目标发射子弹。两个物体都是灰色的。我有碰撞检测,可以检测不明飞行物和子弹何时相交,但奇怪的是:

这项工作:

private void collideWithUFO() { 
    if (bullet != null) {
        GObject collObj = getElementAt(ufo.getX(), ufo.getY()); 
        if (collObj == bullet) {
            remove(ufo); 
            remove(bullet); 
            ufo = null; 
            bullet = null;
        }
     }
}
…但是如果我将
getElementAt
更改为如下所示的bullet,并检查ufo,它将无法检测碰撞:

private void collideWithUFO() { 
    if (bullet != null) {
        GObject collObj = getElementAt(bullet.getX(), bullet.getY()); 
        if (collObj == ufo) {
            remove(ufo); 
            remove(bullet); 
            ufo = null; 
            bullet = null;
        }
     }
 }
我是先选择ufo还是子弹应该无关紧要,但显然不是。现在有更奇怪的事情。如果我把子弹从GRect换成GOval,第二种碰撞检测方式会突然起作用。我是一个JavaNoob,所以请让我知道这种行为是否有意义

public GObject getElementAt(double x, double y)

Returns the topmost graphical object that contains the point (x, y), or null if no such object exists.
因此
getElementAt(bullet.getX(),bullet.getY())
只会在ufo是最上面的图形元素时给出ufo,否则会得到bullet


所以
getElementAt(bullet.getX(),bullet.getY())
只会在ufo是最上面的图形元素时给你ufo,否则你会得到bullet。

谢谢,现在我明白了。这也意味着把子弹从格雷特换成戈瓦尔也会把它放在不明飞行物的下面。谢谢,现在我明白了。这也意味着把子弹从格雷特换成戈瓦尔也会把它放在不明飞行物的下面。