代码之家  ›  专栏  ›  技术社区  ›  Hamed Kamrava

AS3:添加定时器以运行函数

  •  0
  • Hamed Kamrava  · 技术社区  · 11 年前

    我正在尝试创建一个简单的Timer来运行一个函数。您可以在下面看到:

    我想跑步 DiceOne DieTwo 动画一段时间。

    rollBtn.addEventListener(MouseEvent.CLICK, rollBtnClicked);
    
    function rollBtnClicked(evt:MouseEvent):void {
        rollNum1 = rollDice();
        rollNum2 = rollDice();
    
        throwDice();
    
        var myTimerStop:Timer = new Timer(2000); // 2 seconds
        myTimerStop.addEventListener(TimerEvent.TIMER, throwDiceStop);
        myTimerStop.start();
    
        DiceOne.gotoAndStop(rollNum1);
        DiceTwo.gotoAndStop(rollNum2);
    }
    function throwDice():void {
        DiceOne.gotoAndPlay(0);
        DiceTwo.gotoAndPlay(0);
    }
    function throwDiceStop(event:TimerEvent):void {
        DiceOne.stop();
        DiceTwo.stop();
    }
    

    但上述说法行不通。请告诉我我在这里缺了什么。

    任何帮助都会很棒。

    1 回复  |  直到 11 年前
        1
  •  1
  •   Vesper    11 年前

    你立即命令你的骰子停在计时器的正下方。删除这些语句并将其重新定位到 throwDiceStop() 作用此外,如果你使用它会更好 flash.utils.setTimeout() 设置一次性计时器,因为在另一种情况下,你可能会错误地创建计时器或无法正确处理其停用(我认为你做得不好,BTW)。

    function rollBtnClicked(evt:MouseEvent):void {
        throwDice();
        setTimeout(throwDiceStop,2000);
    }
    function throwDice():void {
        DiceOne.play(); // don't get started with 0, as it'll end you up 
        // with consistent animation through different throws
        DiceTwo.play();
    }
    function throwDiceStop():void {
        rollNum1 = rollDice();
        rollNum2 = rollDice();
        DiceOne.gotoAndStop(rollNum1); // and only here select proper values for dice
        DiceTwo.gotoAndStop(rollNum2);
        // inform the game about the dice finally settling, TODO
    }