【问题标题】:Javascript When looping through array, webpage freezes/crashesJavascript循环数组时,网页冻结/崩溃
【发布时间】: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


【解决方案1】:

所以,感谢 cmets 中的某个人,我想通了。这是一个行为不端的变量。 以下是我认为破坏一切的代码。

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++)
{

以下是使它起作用的更改。 (忽略被注释掉的 collidedObjects 数组)

for(var 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(var i=0; i<gameObjects.length; i++)
{

显然是因为两个循环使用了相同的变量,这导致了一些问题。所以我只是定义了变量并且它起作用了!希望这可以帮助找到这个的其他人:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多