Таймер не сбрасывается - PullRequest
2 голосов
/ 30 ноября 2011

Привет, ребята, у меня есть рабочий таймер, который останавливается (), когда я вызываю его и запускаю, но я не могу его сбросить (). Он начинается только с того места, где он остановился.

код для таймера

package 
{

    import flash.display.MovieClip;
    import flash.display.Stage;
    import flash.text.TextField;
    import flash.events.Event;
    import flash.utils.Timer;
    import flash.events.TimerEvent;


    public class Score extends MovieClip
    {
        public var second:Number = 0;
        public var timer:Timer = new Timer(100);
        private var stageRef:Stage;
        private var endScore:displayFinalScore;

        public function Score(stageRef:Stage)
        {
            x = 560.95;
            y = 31.35;
            this.stageRef = stageRef;
            this.endScore = endScore;

            timer.addEventListener(TimerEvent.TIMER, scoreTimer);
            timer.reset();
            timer.start();
            updateDisplay();


        }

        public function scoreTimer(evt:TimerEvent):void
        {

            second += 1;
            updateDisplay();
        }

        public function get10Points(points:Number) : void
        {
            second += points;
            updateDisplay();
        }

        public function finalScore() : void {

            timer.stop();
        }

        public function resetTimer(): void {

            timer.reset();
            timer.start();
            updateDisplay();
        }

        public function updateDisplay(): void
        {

            scoreDisplay.text = String("Score: " +second);

        }
    }
}

Код для того, где я звоню, чтобы делать вещи:

private function sendGameOver(e:Event) : void
{
    //Stop the stage and remove everything
    stop();
    stage.removeChild(ourBoat);
    stage.removeChild(score);
    removeEventListener(Event.ENTER_FRAME, loop);

    //Add the end score     
    addChild(endScore);
    //Add the game over  
    addChild(endGame);
    addChild(playAgain);

    //Add the play again options
    playAgain.addEventListener(MouseEvent.CLICK, newGame);
    score.finalScore();


}

public function newGame (e:MouseEvent) :void 
{
    score.resetTimer();
    gotoAndPlay(1);
    removeChild(endGame);
    removeChild(endScore);
    removeChild(playAgain);
    stage.addChild(ourBoat);
    stage.addChild(score);

    //Keep the boat within the desired boundaries
    ourBoat.x = stage.stageWidth / 2;
    ourBoat.y = stage.stageHeight - 100;

    addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
}

1 Ответ

5 голосов
/ 30 ноября 2011

В вашей функции resetTimer() вы сбрасываете таймер (это прекрасно работает). Но дело в том, что вы не используете сам таймер для вычисления переменной секунд. Поэтому, когда вы снова запустите таймер, секунды продолжатся с того места, где они остановились.

Вам нужно сбросить переменную seconds.

public function resetTimer(): void 
{
    seconds = 0;
    timer.reset();
    timer.start();
    updateDisplay();
}

Имейте в виду, что в этом случае ваш таймер - это просто инструмент, который вы используете для отображения собственной интерпретации секунд, хранящихся в вашей переменной seconds. Таким образом, манипулирование таймером не изменит ни секунды, ни дисплей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...