繁体   English   中英

Java UFO游戏中的碰撞检测

[英]Collision detection in Java ufo game

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

这有效:

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.

因此getElementAt(bullet.getX(), bullet.getY())如果不明飞行物是最顶层的图形元素,则getElementAt(bullet.getX(), bullet.getY())仅会给您不明飞行物,否则您将得到子弹。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM