【发布时间】:2018-03-09 21:16:12
【问题描述】:
所以,正如标题所暗示的,当我在我的游戏中循环遍历一个数组以进行碰撞时,它会崩溃。让我给你一些更多的细节,当循环遍历数组时,我遍历数组一次以检查集合对象的碰撞,并使用另一个数组再次循环遍历对象以进行碰撞。在非常特殊的情况下,网站会崩溃。当物体撞到角落并撞到两面墙壁时,网页就会停止。
这是游戏的代码:
function RunPhysics()
{
//Move all objects
for(i=0; i<gameObjects.length; i++)
{
var obj = gameObjects[i];
SetObjectPos(obj, obj.xPos + obj.xForce, obj.yPos + obj.yForce);
}
//Check all objects against each other for collision.
var collidedObjects = [];
for(i=0; i<gameObjects.length; i++)
{
var current = gameObjects[i];
for(x=0; x<gameObjects.length; x++)
{
for(z=0; z<collidedObjects.length; z++)
{
--It crashes somewhere around here.
if(collidedObjects[z] == gameObjects[i])
{
break;
}
else
{
continue;
}
}
每个对象都包含位置、当前力、颜色和碰撞类型。有什么想法吗?
【问题讨论】:
-
您检查控制台是否有错误?有很多代码你没有显示。
-
所有编程都有一个通用的经验法则。如果您将相同的控制结构嵌套 3 层或更多层,则说明您没有正确考虑问题。你需要分解你的工作。这种级别的循环嵌套只是在乞求崩溃。此外,如果您正在循环数组,请使用
.forEach(),因为它无需管理索引计数器。 -
我尝试检查控制台是否有错误,但控制台崩溃并且不会显示错误。我有 3 个循环的原因是因为第一个是为了获取正在碰撞的对象,第二个是检查哪个对象与对象的碰撞,第三个是我尝试通过做一个来解决问题看看我能不能避免这个问题。
-
听起来像循环 2 和 3 可以合并。
-
您是否检查过您的代码是否因任何原因以无限循环结束?浏览器在迭代中费劲,通常是无限循环的结果
标签: javascript arrays crash