2014-10-16 30 views
1

我嘗試了幾種方法將布爾值輸出實現爲if語句。不知怎的,我做錯了。我可以改變布爾值和console.log的值,所以這應該是正確的。然後我嘗試在一個if語句中使用它,但不知何故它被忽略,並沒有給出預期的結果。 這是我的代碼:將布爾值從true更改爲false並將其用於if()之後使用jquery

var heroVelX = game.currentHero.GetLinearVelocity().x; 
    var heroVelY = game.currentHero.GetLinearVelocity().y; 
    var speed = Math.sqrt(Math.pow(heroVelX, 2) + Math.pow(heroVelY, 2)); 
    var moveOn = ""; 

    function delay(){ 
     moveOn = Boolean(speed<1.5); 
     console.log("Speed = " + speed + " " + moveOn);  
    }; 

    setTimeout(delay, 3500); 

    // These are the conditions I have tried using. I can see in console.log that the value is changed. But somehow it is ignored? All the other conditions are accepted in the if-statement.  
    // moveOn ===!false 
    // moveOn == true 

    if(!game.currentHero.IsAwake() || moveOn === !false || heroX<0 || heroX >game.currentLevel.foregroundImage.width){ 
      // then delete the old hero 
      box2d.world.DestroyBody(game.currentHero); 
      game.currentHero = undefined; 
      // and load next hero 
      game.mode = "load-next-hero"; 
     } 

誰能告訴我什麼,我做錯了什麼?

+2

'的setTimeout(延遲,3500);'這條線將運行,那麼* *繼續到下一個(你的情況),其中'moveOn'仍然是' 「」 '因爲'delay()'還沒有執行。 – 2014-10-16 11:41:17

+0

如何才能停止該程序,直到moveOn發生變化?還是有另一種解決方案? – 2014-10-16 13:03:32

+0

'setTimeout'安排對'delay()'的調用,所以如果你想在*延遲之後運行*,把它放在'delay()' – 2014-10-16 13:09:49

回答

1

你正在做的幾件事情錯了......

首先,這是可怕的定義VAR爲字符串,而這種改變後,爲布爾值。

其次,把你的布爾值放入不同的日誌中,並用dir代替。

if語句太混亂了。

而且沒有必要轉換爲布爾值。

看看這個:

var heroVelX = game.currentHero.GetLinearVelocity().x; 
var heroVelY = game.currentHero.GetLinearVelocity().y; 
var speed = Math.sqrt(Math.pow(heroVelX, 2) + Math.pow(heroVelY, 2)); 
var moveOn = false; 

function delay(){ 
    moveOn = (speed<1.5) ? true : false; 
    console.log("Speed = " + speed); 
    console.dir(moveOn); 


}; 

setTimeout(delay, 3500); 

if(!game.currentHero.IsAwake() || moveOn || heroX<0 || heroX >game.currentLevel.foregroundImage.width){ 
     // then delete the old hero 
     box2d.world.DestroyBody(game.currentHero); 
     game.currentHero = undefined; 
     // and load next hero 
     game.mode = "load-next-hero"; 
    } 
+0

我看到了聲明一個字符串並將其更改爲布爾值的要點。 .dir對我來說是新的,不會給我任何反饋?我怎樣才能改進if語句?我試圖用你的建議,但它不能解決我的問題? – 2014-10-16 13:57:06

+0

使用.dir而不是.log的想法是因爲.log會將值轉換爲字符串,並且轉換爲布爾型的字符串是一個空字符串,您將看不到。 .dir會告訴你var的實際值。另請參閱我的代碼。我在if語句中刪除了moveOn的所有操作符。布爾它自己就足以在if語句中成爲真/假。你現在有什麼行爲? – jonyjm 2014-10-16 14:45:21

+0

我已經刪除了delay()函數,因爲它會中斷布爾值。它不會傳遞它。這不是最佳的,但沒關係。 – 2014-10-16 15:27:23

相關問題