【问题标题】:Action Script 3. Restore timer to 0 after game restart动作脚本 3. 游戏重新开始后将计时器恢复为 0
【发布时间】:2013-05-07 16:00:30
【问题描述】:

我正在创建 Flash 游戏,这里有一个计时器,用于计算玩家在当前级别上玩了多长时间。这里是“重启”按钮,点击这个按钮后我需要重启计时器(从0开始计数)。

这是我的计时器代码:

 public function MemoryGame()
            {
                addChild(CardContainer);
                tryAgain.addEventListener(MouseEvent.CLICK, restartGame);
                    timer = new Timer(1000); //create a new timer that ticks every second.
                    timer.addEventListener(TimerEvent.TIMER, tick, false, 0, true); //listen for the timer tick

                    txtTime = new TextField();
                    addChild(txtTime);
                    tmpTime = timer.currentCount;
                    timer.start();
    }

            private function tick(e:Event):void {
               txtTime.text = showTimePassed(timer.currentCount - tmpTime);                 
                var format:TextFormat = new TextFormat();
                format.font = "Verdana";
                format.color = 0xFF0000;
                format.size = 16;
                format.bold = true;  
                //txtTime.x = 250;
                txtTime.width/2;

                var stageCenter_x:Number = stage.stageWidth/2;
                var stageCenter_y:Number = stage.stageHeight/2;

                var textCenter_x:Number = txtTime.width/2;
                var textCenter_y:Number = txtTime.height/2;

                txtTime.x = stageCenter_x - textCenter_x;

                txtTime.autoSize = TextFieldAutoSize.CENTER;
               txtTime.defaultTextFormat = format;

    }
    function showTimePassed(startTime:int):String {

      var leadingZeroMS:String = ""; //how many leading 0's to put in front of the miliseconds
      var leadingZeroS:String = ""; //how many leading 0's to put in front of the seconds
      var leadingZeroM:String = "";

      var time = getTimer() - startTime; //this gets the amount of miliseconds elapsed
      var miliseconds = (time % 1000); // modulus (%) gives you the remainder after dividing, 

      if (miliseconds < 10) { //if less than two digits, add a leading 0
        leadingZeroMS = "0";
      }

      var seconds = Math.floor((time / 1000) % 60); //this gets the amount of seconds

      if (seconds < 10) { //if seconds are less than two digits, add the leading zero
        leadingZeroS = "0";
      }

      var minutes = Math.floor((time / (60 * 1000) ) );
        if (minutes < 10) { //if seconds are less than two digits, add the leading zero
        leadingZeroM = "0";
      }
      //60 seconds times 1000 miliseocnds gets the minutes
      return leadingZeroM + minutes + ":" + leadingZeroS + seconds + "" + leadingZeroMS ;



    }

当我使用:removeChild(txtTime); 和后来的addChild(txtTime); 计时器不重新启动只是暂时删除,稍后再次添加并继续计时。如何将计时器恢复为0?有任何想法吗?非常感谢。

编辑:
使用 restartGame() 函数时必须重置计时器。

当我使用它时 - 没有任何反应。

public function MemoryGame()
        {
            addChild(CardContainer);
            tryAgain.addEventListener(MouseEvent.CLICK, restartGame);
                timer = new Timer(1000); //create a new timer that ticks every second.
                timer.addEventListener(TimerEvent.TIMER, tick, false, 0, true); //listen for the timer tick
                        timer.addEventListener(TimerEvent.TIMER, resetTimer);
                txtTime = new TextField();
                addChild(txtTime);
                tmpTime = timer.currentCount;
                timer.start();
}

        function restartGame(e:MouseEvent):void
    {
        timer.addEventListener(TimerEvent.TIMER, resetTimer);
    }

        function resetTimer(event:TimerEvent):void{
            timer.reset();
            timer.start();
        }

当我使用这个 - 计时器停止并继续计数,但不重置。

        function restartGame(e:MouseEvent):void
    {
        timer.reset();
        timer.start();
    }

怎么了?

【问题讨论】:

    标签: actionscript-3 flash object actionscript timer


    【解决方案1】:

    你可以使用

    timer.reset();
    

    重置它然后重新启动它:

    timer.start();
    

    更多信息请见docs

    【讨论】:

    • 谢谢你的回答,但是当我使用 timer.play();我收到错误:1061: Call to a possibly undefined method play through a reference with static type flash.utils:Timer. 和 timer.reset();只是停止计时器,而不是刷新到“0”。
    • 抱歉——意思是 timer.start()。它应该将计数器重置为零;不知道为什么它不适合你
    • 谢谢,但这不起作用。计时器.reset();我不知道为什么,但工作与停止相同,它不是重置计时器,只是停止。当我使用 timer.start();它继续计数。
    • 这是一个小测试程序。您会看到它将计数重置为零: var timer:Timer = new Timer(100, 5); timer.addEventListener(TimerEvent.TIMER, timerHandler);计时器.start();函数 timerHandler(event:TimerEvent):void { trace(timer.currentCount); if (timer.currentCount==3) { timer.reset();计时器.start(); } }
    • 我用代码更新了我的问题它现在的样子。也许这一行是错误的`timer.addEventListener(TimerEvent.TIMER, resetTimer);`?我不知道如何正确使用 resetTimer 功能。如果我使用 resetTimer();我收到错误:1136: Incorrect number of arguments. Expected 1.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多