gpt4 book ai didi

javascript - 在数组上迭代数组而不重复

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:21:50 24 4
gpt4 key购买 nike

我正在编写一个带有简单碰撞检测系统的简单游戏。

我目前有这段代码用于在同一个数组上迭代数组,这样我就可以检查对象是否彼此靠近以及它们是否会发生碰撞:

var objects = []; //assume this is not empty


for(i=0;i<objects.length;i++){
for(a=0;a<objects.length;a++){
if(a != i){
//collision handling
}
}
}

但这段代码的主要问题是我有重复项。例如,我检查了 i 和 a 但后来在某个地方我检查了 a 和 i 具有相同的值。

我尝试使用一个数组来保存哪些对象与哪些对象进行检查,但它让我的 fps 大幅下降。

执行此操作的最佳方法是什么?

最佳答案

在第一个 for 循环的当前位置开始第二个 for 循环:

for(i=0;i<objects.length;i++){
for(a=i+1;a<objects.length;a++){
//collision handling
}
}

通过这种方式,您可以仅针对当前项目之前的项目检查数组中的每个项目。

让我们检查一下您的原始代码:

objects = ['a', 'b', 'c']
for(i=0;i<objects.length;i++){
for(a=0;a<objects.length;a++){
if(a != i){
console.log("Checking "+ objects[i]+ "vs. "+objects[a]);
}
}
}

现在,让我们检查我的示例:

objects = ['a', 'b', 'c']
for(i=0;i<objects.length;i++){
for(a=i+1;a<objects.length;a++){
console.log("Checking "+ objects[i]+ "vs. "+objects[a]);
}
}

一般的想法是只将每个项目与数组中后面的项目进行比较:

[a, b, c, d]
a => vs b, c, d ar[0] vs ar[1], ar[2], ar[3]
b => vs c, d ar[1] vs ar[2], ar[3]
c => vs d ar[2] vs ar[3]

关于javascript - 在数组上迭代数组而不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40364010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com