我在检查列表中具有相同对象的对象时遇到问题。我有一个对象列表,其中包含不同类型的对象,例如子弹、敌人和随机背景对象。 现在我想检查一些物体是否相互碰撞,比如子弹与敌人。 问题是,当我将相同的 for 循环放在具有两个相同对象的 for 循环中时,我没有得到预期的行为...有人知道更好的处理方法吗?
左图是子弹不再移动了,右图是去掉循环中的循环后的情况。
https://www.dropbox.com/s/92tnxizxdneqgz3/ss1.png
编辑:不同的字符串是从脚本中读取的,我的目标是获得最大的灵 active 。这也是为什么我不想要每种类型对象的不同集合的原因。当我这样做时,碰撞正在起作用。
for (Object o : objects) {
if (o.behavior.equals("aggressive")) {
o.aggressive(ship.x, ship.y, ship.z);
}
if (o.behavior.equals("missile")) {
o.missile();
if (o.type.equals("bullet_player")) {
for (Object n : objects) {
//doesn't matter what i put here
}
}
}
}
解决方案:
我让它工作了,问题似乎在于将数组列表的 for 循环嵌套在另一个数组列表中。我最终做的是:我克隆了数组列表,用原始对象列表检查克隆列表,我检查对象是否相同,如果不相同,我进行碰撞检查。
最佳答案
标准方法是这样的,它将比较每个配对一次:
for(int i=0; i<objects.size(); i++)
for(int j=i+1; j<objects.size(); j++)
//.... compare objects[i] and objects[j] for collision etc
随着您的游戏世界变得越来越复杂,请考虑将对象放置在 spatial index 中相反。
关于java - 检查具有相同对象列表的对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11730017/