实际上我使用的是p5.js,但我认为js内置的函数也应该以与javascript相同的方式工作。
给定的是存储在数组中的动态生成的对象的列表。对象具有坐标(x,y)、大小和其他一些属性。这些对象根据它们的属性(方向、速度)在屏幕上移动
我想写一个函数,在那里我可以检查对象的坐标,如果它们发生碰撞,它们应该改变方向,例如,为此我需要将我的数组中的每个元素与其他元素进行比较。
因为我有许多不知道的元素,所以我用
for (let i in array)
然后,我想弹出第一个元素,并在包含的for each循环中将其与数组的其余部分进行比较。
在这个循环之后,我想取消这个元素到数组的移位,以便对整个数组执行相同的操作。
我猜想,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)
}
}
发布于 2019-11-19 10:23:39
您使用的是for each循环,它在变量(i
、j
)中存储对象,而不是索引。因此,您应该只使用j
而不是array_of_objects[j]
然而,最重要的是,您应该将
array_of_objects.unshift(element)
在第二个for循环之外(将其向下移动2行)。否则,您将多次取消移位,而这种情况应该只发生一次。
此外,(我不确定这在您的原始代码中是否真的相同),您遗漏了一个右花括号。
https://stackoverflow.com/questions/58900696
复制相似问题