【问题标题】:how to get specific objects from an ArrayList如何从 ArrayList 中获取特定对象
【发布时间】:2013-04-25 17:46:58
【问题描述】:

在我目前正在制作的游戏中,我需要检查两个敌人是否相互碰撞,如果他们碰撞,只有这两个敌人应该受到影响,而不是所有存在的敌人。因此,当它们发生碰撞时,我需要从 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
}

【问题讨论】:

  • if(r2.intersects(r2))... 这看起来不对。我认为您需要发布更多代码。您需要两个不同对象的边界来检查它们的交集。
  • 您需要澄清您的问题。发布更多相关代码。到目前为止,一切都非常神秘。

标签: java object arraylist get 2d


【解决方案1】:

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

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。它更清晰了一点,养成为变量使用好名字的习惯会在以后省去你的麻烦。

【讨论】:

    【解决方案2】:

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

    不过,Rob 的回答非常好。

    【讨论】:

      猜你喜欢
      • 2018-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 2012-07-19
      相关资源
      最近更新 更多