【问题标题】:AS3 About timers and loopsAS3 关于定时器和循环
【发布时间】:2015-03-09 22:24:28
【问题描述】:

我有一个小问题。 我正在制作一个简单的棋盘游戏。用户可以与 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
            }
        }
    }
}

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

【问题讨论】:

    标签: actionscript-3 timer setinterval flash-cc


    【解决方案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,游戏将仅由状态控制

    【讨论】:

    • 首先感谢您的回答。我选择使用超时方法(所以我不必重写很多代码)。但是,我已经注意到您提出的代码并将在我的下一个项目中使用它,因为它看起来比我做的要好得多:)。我正在用工作代码更新我的第一篇文章,如果它可以帮助其他人!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多