Javascript,无限循环和冻结

时间:2012-12-08 20:12:21

标签: javascript html5 canvas physics collision

所以我正在使用HTML5 canvas和javascript进行简单的物理模拟。我正在尝试进行一些真实的碰撞,但每当发生碰撞时,代码就会开始无限循环并冻结页面。

我使用的是Google Chrome 24.0.1312.32 beta-m

在查看javascript控制台时,行“console.log(”我正在与某些东西发生碰撞“)”变得疯狂,每秒打印数千次并完全打破页面。

我不确定为什么会这样,我不知道该怎么做。任何帮助和/或输入都会非常感激。

for (i = 0; i <= 3; i++) {
    if (collide(i)) {
        console.log("I am colliding with something");
        if (typeof getCollideIndx === 'undefined') {
            console.log("collide index is not undefined");
            if (!getCollideIndx(i)) {
                console.log("Made it past null check");
                //...update object based on collision

collide()函数是:

function collide(b) {
for (i = 0; i <= 3; i++) {
    //Distance between each object
    var distance = (Math.sqrt(Math.pow((balls[b].x - balls[i].x), 2) + Math.pow(balls[b].y - balls[i].y, 2)));
    if (distance < 32) {
        //must be less than 2*radius -- all radii are the same

        //makes it so that it doesn't return true when checking its own index
        if (!(balls[b].mass == balls[i].mass)) {
            return true;
        } else {
            return false;
        }
    }
}

}

2 个答案:

答案 0 :(得分:0)

我在代码中看不到无限循环,我最好的猜测就是这句话

 if (typeof getCollideIndx === 'undefined')

每次都失败,以下代码所处的任何功能都被称为

for (i = 0; i <= 3; i++) {
    if (collide(i)) {
        console.log("I am colliding with something");
        if (typeof getCollideIndx === 'undefined') {
            console.log("collide index is not undefined");
            if (!getCollideIndx(i)) {
                console.log("Made it past null check");
                //...update object based on collision

同样在这里,我没有看到for循环的重点,因为控件总是返回到调用函数(在collide()函数中)

答案 1 :(得分:0)

好吧,被困在for循环中意味着索引变量i在某处被错误地设置了。我无法确切地看到整个代码,但循环for(i=0; i<3; i++){...i分配给window对象,因为您没有明确确定范围(即{ {1}})。

参见例如this jsfiddle,其中第一个函数只运行一次而不是三次,因为第二个函数中的同一个变量for(var i...会受到影响。

显然运行一次!=无限循环,但是如果i函数对collide执行某些操作(或者在发现碰撞后可能会中断?)那么i的值将是每次调用时,在for循环开始时重置为0。

所以,如果没有更多的代码,我无法肯定地说;但我在这种情况下的建议是:总是在for循环中使用i或者可能发生奇怪的事情!