2014-02-21 93 views
0

這個switch/case語句總是默認,我不希望發生這種情況。另外,我沒有得到任何錯誤。有人能告訴我我的問題是什麼嗎?該功能總是追蹤我期望的功能,但我希望它能在舞臺上放置一臺推土機。爲什麼這個Switch/Case語句總是默認執行? AS3

import flash.display.MovieClip; 
import flash.events.MouseEvent; 
import flash.ui.Mouse; 

//START SCREEN 
var startScreen: MovieClip; 
var bulldozer: MovieClip; 


startClick.addEventListener(MouseEvent.CLICK, startGame); 

function startGame(event: MouseEvent): void { 
    startScreen.parent.removeChild(startScreen); 
startClick.parent.removeChild(startClick); 
var enemyGenerator: Number = Math.random(); 
switch (enemyGenerator) { 
    case 0.8 <= enemyGenerator && enemyGenerator <= 1: 
     stage.addChild(bulldozer); 
     bulldozer.x = stage.x = 150; 
     bulldozer.y = stage.y = 150; 
     break; 
    case 0.6 <= enemyGenerator && enemyGenerator < 0.8: 
     stage.addChild(bulldozer); 
     bulldozer.x = stage.x = 250; 
     bulldozer.y = stage.y = 250; 
     break; 
    case 0.4 <= enemyGenerator && enemyGenerator < 0.6: 
     stage.addChild(bulldozer); 
     bulldozer.x = stage.x = 350; 
     bulldozer.y = stage.y = 350; 
     break; 
    case 0.2 <= enemyGenerator && enemyGenerator < 0.4: 
     stage.addChild(bulldozer); 
     bulldozer.x = stage.x = 400; 
     bulldozer.y = stage.y = 400; 
     break; 
    case 0 <= enemyGenerator && enemyGenerator < 0.2: 
     stage.addChild(bulldozer) 
     bulldozer.x = stage.x = 450; 
     bulldozer.y = stage.y = 450; 
     break; 
    default: 
     trace (enemyGenerator); 
} 
startClick.removeEventListener(MouseEvent.CLICK, startGame); 
} 

回答

1

因爲你用錯了。

問題1:您的enemyGenerator變量的值類型是什麼? - 回答:int

問題2:什麼是您的交換機條件的值類型? - 答:布爾

所以用布爾比較一個int始終是假的......

ex: 0.9 == true // will be false 

你需要的是改變你的交換機成一個IF - ELSE IF條件...像下面

var enemyGenerator: Number = Math.random(); 

if(enemyGenerator >= 0.8) 
{ 
    stage.addChild(bulldozer); 
    bulldozer.x = stage.x = 150; 
    bulldozer.y = stage.y = 150; 
} 
else if(enemyGenerator >= 0.6) 
{ 
    stage.addChild(bulldozer); 
    bulldozer.x = stage.x = 250; 
    bulldozer.y = stage.y = 250; 
} 
else if(enemyGenerator >= 0.4) 
{ 
    stage.addChild(bulldozer); 
    bulldozer.x = stage.x = 350; 
    bulldozer.y = stage.y = 350; 
}  
else if(enemyGenerator >= 0.2) 
{ 
    stage.addChild(bulldozer); 
    bulldozer.x = stage.x = 400; 
    bulldozer.y = stage.y = 400; 
} 
else 
{ 
    stage.addChild(bulldozer) 
    bulldozer.x = stage.x = 450; 
    bulldozer.y = stage.y = 450; 
} 

而且爲什麼不添加之前或IF語句後孩子buldozer ..除了在每個if/case分支總是寫呢?

0

只有當您確切地等同於某件事時,案例陳述纔有效。就像這樣:

case condition 1: 

如果你想要做比較,你需要將其轉換成ifelse if

0

你的case語句是平原無效。開關箱操作員只執行平等檢查。如果您執行呼叫Math.random(),您會收到一個永遠不會嚴格等於某個值的值。爲了使評選出的給定N可能性,您使用的int並調用隨機這樣的:

var r:int=Math.floor(N*Math.random()); 

然後,r從0舉行值爲N-1,然後你就可以開關。

switch(r) { 
    case 0: // bla bla 
    case 1: // bla bla bla 
    ... 
    case N-1: // you know the drill 
} 
0

這是一個棘手的問題。一旦上面的人回答正確的事情是行動腳本有它的技巧。

如果您只需將switch (enemyGenerator)替換爲switch (true),則您的交換機可以正常工作。

我只是想表明你想要做的事情是可能的,但我會建議使用if語句,如Adrian所述。

乾杯

相關問題