java - 检查具有相同对象列表的对象列表

标签 java android collision-detection libgdx

我在检查列表中具有相同对象的对象时遇到问题。我有一个对象列表,其中包含不同类型的对象,例如子弹、敌人和随机背景对象。 现在我想检查一些物体是否相互碰撞,比如子弹与敌人。 问题是,当我将相同的 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/

相关文章:

android - 如何根据另一个 Activity 的结果启用/禁用按钮?

java - 当与 Android 中的图 block 碰撞时停止玩家

JavaFX:防止形状拖动到另一个形状上

java - 在 Java 中从 URL 解析 XML 标记名

Java Canvas 绘图

android - 使用 MPAndroidChart 库时 width and height must be > 0 错误

algorithm - 针对凸多面体形状类型转换胶囊

java - Java对象中的HashCode和Equals方法

java - Jenkins CLI 提示 ssh phasphrase

Android:我应该在每次打开应用程序时调用 LicenseChecker 吗?