2012-11-29 73 views
0

所以我有這樣的代碼隨機陣列選擇索引,然後顯示匹配MC

function flip(e:MouseEvent) 
{ 
//assign choice a random deck index. 
    choice=int(deck[Math.round((Math.random()*deck.length))]); 
    if(choice!=int(deck[9])) 
    { 
     //removeChild(MovieClip(e.target)); 

     //position firecard.   
     addChild(fire); 
     fire.x=e.target.parent.x; 
     fire.y=e.target.parent.y; 

     //remove cardback 
     e.target.parent.removeChild(MovieClip(e.target));  
     fire.parent.setChildIndex(fire,numChildren-2); 
     trace(choice); 
    } 
    else if(choice==int(deck[9])) 
    { 
     trace(choice); 
     water.x=e.target.parent.x; 
     water.y=e.target.parent.y; 
     e.target.parent.removeChild(MovieClip(e.target)); 
     water.parent.setChildIndex(water,numChildren-2); 
    } 

} 

評論解釋幾乎是應該做的一切。通過動畫片段的偵聽器調用翻轉。選擇是每次調用flip時隨機選取的數字,並從甲板陣列的隨機索引中獲取其值。然後,不管選擇什麼,被點擊的卡片被移除並且根據選擇的變量在其位置上放置卡片。但是,會發生兩個錯誤(在編譯器或輸出中沒有任何操作發生)。

  1. 當我點擊另一張卡時,新創建的卡(火)也被刪除。我希望他們留在原地。

  2. 跟蹤總是打印一個0.不應該打印像0到9之間的任何東西嗎?

PS:甲板有10個值。其中9個是「火」,最後是「水」。選擇從0初始值開始。

+0

我不確定這是否相關,但我認爲你應該使用Math.floor()而不是Math.round()。使用Math.round()會導致最終數字減少。 – mitim

+0

Math.round()不是關於某些東西會少一些,它是關於分數四捨五入的方式Math.round(Math.random()* 10),您將有0..10包含意味着您的數組將拋出錯誤爲對於10的長度它將有0..9個索引。 –

+0

這是真的,但我也想說,由於這個舍入,一個'結束'數字,比如說'0'會因此而減少,因爲0的範圍只有0到0.4999,爲0.之後,0.5到1.49999將被舍入到'1',這導致'0'出現少於其他數字。 – mitim

回答

1

問題是你有數組中的字符串(「火」和「水」)。但是你將這個字符串轉換爲一個int類型,所以變爲0.只需嘗試一下,而不用強制轉換數組的值。

function flip(e:MouseEvent) 
{ 
    //assign choice a random deck index. 
    choice=deck[Math.floor(Math.random()*deck.length)]; 
    if(choice != deck[9]) 
    { 
     //removeChild(MovieClip(e.target)); 

     //position firecard.   
     addChild(fire); 
     fire.x=e.target.parent.x; 
     fire.y=e.target.parent.y; 

     //remove cardback 
     e.target.parent.removeChild(MovieClip(e.target));  
     fire.parent.setChildIndex(fire,numChildren-2); 
     trace(choice); 
    } 
    else if(choice == deck[9]) 
    { 
     trace(choice); 
     water.x=e.target.parent.x; 
     water.y=e.target.parent.y; 
     e.target.parent.removeChild(MovieClip(e.target)); 
     water.parent.setChildIndex(water,numChildren-2); 
    } 

} 

除了刪除類型轉換之外,我沒有改變任何東西。

+0

Typecasting,現在這是一個有趣的詞。但是,我仍然只獲得0。 – mechanicarts

+0

對不起朋友,我忘了說一件事,即。變量'choice'的聲明。我想它被聲明爲'int'。只要確保它被聲明爲'String',然後嘗試,它肯定會起作用。例如:'var choice:String;' – Moorthy

+0

實際上,起初我認爲這也是一種僥倖,因爲它總是在打印「火焰」,但經過堅持,我意識到這是因爲它的可能性不利於我! (9火與1水)...它的作品!謝謝你,在這裏,cookie:D – mechanicarts

0
function flip(e:MouseEvent) 
{ 
//assign choice a random deck index. 
    choice=Math.floor(Math.random()*deck.length); 
    if(choice!=9) 
    { 
     ... 
    } 
    else if(choice==9) 
    { 
     ... 
    } 
}