我有一个简单的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.
因此,如果ufo是最顶层的图形元素,则
getElementAt(bullet.getX(), bullet.getY())
仅会给您ufo,否则您将获得项目符号。