2015-01-12 40 views
0

我有一個小問題。 我在做一個簡單的棋盤遊戲。用戶有可能對抗AI。它工作正常。遊戲規則規定,如果有人投擲骰子並製作1或4,他可以再次玩。所以我做了一個for循環。它也可以工作。 AI根據需要多次播放,然後允許P1播放。 我的問題是,所有的兵的動作動畫發生在同一時間。 示例:AI輪到:4.再次播放:1.再次播放:5.玩家輪流。所有同時播放的動畫(看起來很奇怪)。我希望AI和第一次投擲之間有2秒的延遲,以便動畫有時間播放。 我讀過我應該使用timersetInterval,但我不知道在哪裏以及如何將它放置在我的循環中。這裏是我的代碼樣本版本,如果它可以幫助:AS3關於定時器和循環

編輯:更新後的代碼,這要歸功於以下答案:

function fnTimeOut() { 
    var intervalId: uint = setTimeout(fnNextPlayer, 2000, null); 
} 

next.addEventListener(MouseEvent.CLICK, fnNextPlayer); 
function fnNextPlayer (e:Event):void{ 
    if (player2.currentFrame == 2) { //AI's turn 
      randDice=random(1, 6); //dice thrown (have a random function setup already) 
      if (randDice==1){ 
       //start animation 
       //move pawns 
       fnTimeOut(); //restarts the function after 2secs 
      } 
      if (randDice==2){ 
       //start animation 
       //move pawns 
       player2.gotoAndStop(1); //starts player1's turns 
       //stop loop because not 1 or 4 
      } 
     } 
    } 
} 

我希望有人能幫助我:) 感謝。

回答

1

你有很多選擇。例如:您可以在動畫的時間軸中添加2秒鐘,並聽取動畫結束。或者你刪除for循環,並在每個步驟後啓動超時。事情是這樣的: 寫一個方法,將作出決定對當前步驟:

function MakeDecision() 
{ 
switch(state): 
case(state1):doSomething1() 
case(state2):doSomething2() 
} 

其中

function doSomething1() 
{ 
..your game code 
startTimer for 2s , and call MakeDecision() 
} 

也可以使一個遊戲循環,它將調用MakeDecision在固定的時間,遊戲將只能由國家控制

+0

首先,謝謝你的回答。我選擇使用超時方法(所以我不必重寫大量的代碼)。但是,我已經注意到了你提出的代碼,並將在我的下一個項目中使用它,因爲它看起來比我所做的要好得多:)。我正在更新我的第一篇文章,如果它可以幫助其他人! – Jeryl