来自相同数组的对象使用for循环,j = i + 1

时间:2014-03-15 20:33:49

标签: javascript arrays loops collision

我有一个循环来检查游戏中对象之间的碰撞,所有对象都收集在同一个数组中。我使用这样的代码来匹配每个对象:

for (var i = 0; i < objs.length; i++) {
    for (var j = i + 1; j < objs.length; j++) {
        collision(objs[i], objs[j]);
    }
}

现在这似乎并没有实现与彼此的所有碰撞,我注意到它也跳过了一些......

然后我提出了这个解决方案:

for (var i = 0; i < objs.length; i++) {
    for (var j = 0; j < objs.length; j++) {
        if (j != i) {
            collision(objs[i], objs[j]);
        }
    }
}

这个解决方案似乎没有任何问题,但我想知道是否有任何方法可以不使用if (j != i)语句,或者是否有完全不同的解决方案?

1 个答案:

答案 0 :(得分:1)

  

Soo,谁是正确的......?

这取决于游戏中 collision 的定义。

如果collisionsymmetric function(例如,当A与B碰撞时,A与B发生碰撞),请使用:

for (var i = 0; i < objs.length; i++) {
    for (var j = i + 1; j < objs.length; j++) {
        collision(objs[i], objs[j]);
    }
}

因为如果您之前检查过(A,B),则无需检查(B,A)。

但是如果可以使A与B发生碰撞而不使B与A发生碰撞,反之亦然,那么你必须检查所有可能的不同对,所以使用

for (var i = 0; i < objs.length; i++) {
    for (var j = 0; j < objs.length; j++) {
        if (j != i) {
            collision(objs[i], objs[j]);
        }
    }
}