0

我有一个简单的 Java 游戏,您可以在其中向移动的目标发射子弹。这两个对象都是 GRects。我有碰撞检测,可以检查 ufo 和子弹何时相互交叉,但奇怪的是:

这有效:

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项目符号更改为如下所示,并检查 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,突然之间第二种形式的碰撞检测就起作用了。我是一个 Java 菜鸟,所以请让我知道这种行为是否有意义。

4

1 回答 1

3
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,否则你会得到子弹。

于 2012-09-08T23:14:44.007 回答