如何在AS3中为Timer添加秒数

时间:2014-03-06 18:37:40

标签: actionscript-3 timer flashdevelop flash-cs6 countdowntimer

嘿大家所以我有一个倒数计时器,我已经设法在我的游戏中实现,我在一些论坛上看到。现在我设置了一个新功能,只要用户Hittest使用Movie Clip就可以为计时器添加一些秒,但它似乎无法正常处理我得到的错误,而它确实增加了更多时间,它是并没有真正添加它,因为当我确实添加更多时间并说计时器倒计时到10时,取决于我在Hittest中添加多少秒,游戏以10而不是0秒结束。所以我不认为它实际上在内部改变了时间间隔。

此外,当我重新开始游戏时,它会显示过去一秒钟的时间,然后一旦开始倒计时,它最终会重置并开始正常倒计时。

以下是我设置的方法:

我的构造函数中的初始化变量:

count = 30; //Count down from 60
        myTimer = new Timer(1000, count);// Timer intervall in ms

        myTimer.addEventListener(TimerEvent.TIMER, countdown);//EventListener for intervalls
        myTimer.addEventListener(TimerEvent.TIMER_COMPLETE, countdownComplete);
        myTimer.start();//start Timer

countDown函数:

private function countdown(e:TimerEvent):void 
    {
         //Display Time in a textfield on stage

        countDownTextField.text = String((count)- myTimer.currentCount); 

         updateCountdownTimer();

    }

在我的HitTest功能中:

private function onPopIsClicked(pop:DisplayObject):void 
    {

                nScore ++;
                updateHighScore();
                updateCurrentScore();

                //Add Explosion Effect
                popExplode = new mcPopExplode();
                stage.addChild(popExplode);
                popExplode.y = mPop.y;
                popExplode.x = mPop.x;

                elapsedTime += 5;
                updateCountdownTimer();

    }

然后最后在我的updateCountdownTimer()中:

public function updateCountdownTimer():void
    {
        countDownTextField.text = String((count)- myTimer.currentCount + elapsedTime); 
    }

你能明白为什么我不能正确地为计时器增加秒数吗?

提前致谢。

** * * 更新 * ** < EM> * **

count = 10; //Count down from 10
        myTimer = new Timer(1000, count);// Timer intervall in ms
        updateCountdownTimer();

        myTimer.addEventListener(TimerEvent.TIMER, countdown);//EventListener for intervalls
        myTimer.addEventListener(TimerEvent.TIMER_COMPLETE, countdownComplete);
        myTimer.start();//start Timer

private function countdown(e:TimerEvent):void 
    {
         //Display Time in a textfield on stage
         updateCountdownTimer();

    }

private function onPopIsClicked(pop:DisplayObject):void 
    {


                elapsedTime += 2;
                myTimer.repeatCount += elapsedTime; //add time to the timer
                count += elapsedTime;
                updateCountdownTimer();
                trace("pop clicked and time");

    }

public function updateCountdownTimer():void
    {
        countDownTextField.text = String((count)- myTimer.currentCount); 
    }

1 个答案:

答案 0 :(得分:1)

因此,为Timer添加时间的解决方案是调整repeatCount属性。您可以在onPopIsClicked()

中执行此操作
private function onPopIsClicked(pop:DisplayObject):void 
{

     nScore ++;
     updateHighScore();
     updateCurrentScore();

     //Add Explosion Effect
     popExplode = new mcPopExplode();
     stage.addChild(popExplode);
     popExplode.y = mPop.y;
     popExplode.x = mPop.x;

     elapsedTime += 5;
     myTimer.repeatCount += 5; //add time to the timer
     updateCountdownTimer();

}

因此,您需要更改显示倒计时的方式,因为我们正在增加repeatCount属性。您的myTimer.currentCount可能会超出count变量的大小,会发生什么情况。因此,在onPopIsClicked()增加elapsedTime之后添加此行:

elapsedTime += 5;
myTimer.repeatCount += 5;
count += 5//this line, increment the count total

如果需要,您还可以将变量设置为递增:

var increaseBy:int = 5

然后你将使用repeatCount,count和elapsedTime(如果你还需要它):

elapsedTime += increaseBy;
myTimer.repeatCount += increaseBy;
count += increaseBy;

你真的不需要elapsedTime,除非你将它用于别的东西。然后你更新了你的文字,没有必要添加elapsedTime所以它看起来像:

countDownTextField.text = String(count- myTimer.currentCount);