Javascript 遍历数组时,网页freezes/crashes
Javascript When looping through array, webpage freezes/crashes
所以,正如标题所暗示的,当我循环遍历数组以在我的游戏中进行碰撞时,它崩溃了。让我给你一些更多的细节,当遍历数组时,我遍历一次数组来检查集合 object 的冲突,然后使用另一个数组再次遍历 objects 来做碰撞。在非常特殊的情况下,网站会崩溃。当 object 撞到角落并撞到两面墙时,网页就停止了。
这是游戏的代码:
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;
}
}
object每个包含位置、当前力、颜色和碰撞类型。有什么想法吗?
所以,感谢评论中的某人,我想通了。这是一个行为不端的变量。
以下是我认为破坏一切的代码。
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++)
{
显然是因为在两个循环中使用了相同的变量,导致了一些问题。所以我只是定义了变量并且它起作用了!希望这对发现这个的其他人有所帮助:)
所以,正如标题所暗示的,当我循环遍历数组以在我的游戏中进行碰撞时,它崩溃了。让我给你一些更多的细节,当遍历数组时,我遍历一次数组来检查集合 object 的冲突,然后使用另一个数组再次遍历 objects 来做碰撞。在非常特殊的情况下,网站会崩溃。当 object 撞到角落并撞到两面墙时,网页就停止了。
这是游戏的代码:
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;
}
}
object每个包含位置、当前力、颜色和碰撞类型。有什么想法吗?
所以,感谢评论中的某人,我想通了。这是一个行为不端的变量。 以下是我认为破坏一切的代码。
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++)
{
显然是因为在两个循环中使用了相同的变量,导致了一些问题。所以我只是定义了变量并且它起作用了!希望这对发现这个的其他人有所帮助:)