我有一个简单的 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 菜鸟,所以请让我知道这种行为是否有意义。