实际上我使用的是p5.js,但我认为函数中内置的js也应该以与javascript中相同的方式工作。
给定的是存储在数组中的动态生成对象的列表。对象具有坐标(x,y(、大小和其他一些属性。这些对象根据其属性(方向、速度(在屏幕上移动
我想写一个函数,在这里我可以检查对象的坐标,如果它们碰撞,它们应该改变方向。例如,为此,我需要将数组中的每个元素与其他元素进行比较。
由于我有很多不知道的元素,我使用进行迭代
for (let i in array)
然后我想弹出第一个元素,并在每个循环的included中将其与数组的其余部分进行比较。
在这个循环之后,我想将这个元素取消到数组中,以便对整个数组执行同样的操作。
我想,pop((的内置函数不会返回这个元素,因为我收到了一个错误,让我思考,这个数组的对象被其他东西更改了。
我该怎么解决?
这是我的这个功能代码:
function checkCollisions() {
for (let i in array_of_objects) {
let element = array_of_objects.pop()
for (let j in array_of_objects) {
if (comparison_of_some_attributes_between(element, array_of_objects[j])) {
some_changes_on_attributes_of(element, array_of_objects[j])
}
array_of_objects.unshift(element)
}
}
您使用的是for each循环,它存储对象,而不是变量(i
、j
(中的索引。因此,您应该只使用j
而不是array_of_objects[j]
然而,最重要的是,你应该把
array_of_objects.unshift(element)
第二个for循环的外部(向下移动2行(。否则,您将多次取消提升它,而这种情况应该只发生一次。
此外,(我不确定这在您的原始代码中是否真的相同(,您缺少了一个结束大括号。