AS3关于计时器和循环

时间:2015-01-12 07:27:26

标签: actionscript-3 timer setinterval flash-cc

我有一个小问题。 我做了一个简单的棋盘游戏。用户可以与AI对战。它工作正常。比赛的规则规定,如果有人投掷骰子并制作1或4,他可以再次上场。所以我做了一个for循环。它也有效。 AI播放所需的次数,然后允许P1播放。 我的问题是,典当运动的所有动画同时发生。 例如:AI轮到:4。再次播放:1。再次播放:5。播放器转向。 4&动画1& 5所有同时播放(看起来很奇怪)。我想在AI和第一次投掷之间延迟2秒,以便动画有时间播放。 我读到我应该使用timersetInterval,但我并不知道将它放在循环中的位置和方式。以下是我的代码的示例版本,如果它有帮助:

编辑:更新了代码,感谢下面的答案:

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 个答案:

答案 0 :(得分: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,游戏将仅由州控制