Java ufo游戏中的碰撞检测



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

这项工作:

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;
        }
     }
 }

我先选择不明飞行物还是子弹应该无关紧要,但显然不是。现在有一件事更让人吃惊。如果我把子弹从GRect改为GOval,第二种形式的碰撞检测会突然生效。我是一个Java迷,所以请让我知道这种行为是否有意义。

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.

因此,只有当ufo是最上面的图形元素时,getElementAt(bullet.getX(), bullet.getY())才会给你ufo,否则你会得到子弹头。

最新更新