2015-01-12 23 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