0

在我目前正在制作的游戏中,我需要检查两个敌人是否相互碰撞,如果他们碰撞,只有这两个敌人应该受到影响,而不是所有存在的敌人。因此,当它们碰撞时,我需要从 ArrayList 中获取两个敌人,以便只有它们会受到影响。我该怎么做呢?

这是将敌人添加到 ArrayList 的代码

zombie.add(new Zombie(randomXSpawn,randomYSpawn));

要检查敌人是否相互碰撞,我目前使用此代码

Zombie z = (Zombie) zombie.get(i);
Rectangle r2 = z.getBounds();
if(r2.intersects(r2)){
     //Code goes here
}
4

2 回答 2

2

您将需要检查每对僵尸,看看它们是否发生了碰撞。执行此检查的最简单方法如下:

for (int i = 0; i < zombie.size(); i++) {
    Rectangle r1 = zombie.get(i).getBounds();
    for (int j = i+1; j < zombie.size(); j++) {
        if (r1.intersects(zombie.get(j).getBounds())) {
            // Code goes here
        }
    }
}

请注意,j不是每次都从零开始。这样一来,只要每个僵尸只在列表中出现一次,您就永远不会检查同一对两次,也不会检查僵尸自身。

此外,作为一般编程技巧,将列表的名称更改为zombies. 它更清晰一些,并且养成为变量使用好名称的习惯将在以后为您省去麻烦。

于 2013-04-25T17:54:24.070 回答
0

此外,如果您还没有这样做,您可能希望在僵尸不能出现的地方(房屋、障碍物等)周围创建边界。

不过,Rob 的回答确实很好。

于 2013-04-25T18:24:38.597 回答