簡體   English   中英

Javascript,無限循環並凍結

[英]Javascript, loops infinitely and freezes

因此,我正在使用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;
        }
    }
}

}

我看不到您的代碼中的無限循環,我的最佳猜測是此語句

 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()函數中)

好吧,被困在for循環中意味着索引變量i在某處被錯誤地設置。 無法完全看到代碼,我不能肯定地說,但是for(i=0; i<3; i++){...的循環for(i=0; i<3; i++){... window對象分配i ,因為您沒有顯式地確定它的作用域(即for(var i... )。

例如, 請參見此jsfiddle ,其中第一個函數只會運行一次,而不是運行三次,因為相同的變量i在第二個函數中會受到影響。

顯然只運行一次!=無限循環,但是如果collide函數對i起作用(或者在發現碰撞后可能中斷?),則每次調用i時, i的值都會在其for循環的開始處重置為0。

是的,沒有更多的代碼,我不能肯定地說。 但在這種情況下,我的建議是:始終在var中使用for循環,否則可能會發生奇怪的事情!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM