0

我有一个小问题。我正在制作一个简单的棋盘游戏。用户可以与 AI 对战。它工作正常。游戏规则规定,如果有人掷骰子并得到 1 或 4,则他可以再次玩。所以我做了一个for循环。它也有效。AI 根据需要播放多次,然后允许 P1 播放。我的问题是棋子运动的所有动画同时发生。示例:轮到 AI:4. 再次播放:1. 再次播放:5. 轮到玩家。4 & 1 & 5 的动画同时播放(看起来很奇怪)。我希望在 AI 的第一次投掷和下一次投掷之间有 2 秒的延迟,以便动画有时间播放。我读到我应该使用 atimer或 asetInterval但我真的不知道在哪里以及如何将它放在我的循环中。

编辑:更新代码,感谢以下答案:

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
            }
        }
    }
}

我希望有人可以帮助我:) 谢谢。

4

1 回答 1

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,游戏将仅由状态控制

于 2015-01-12T08:12:13.900 回答