如何增加计时器AS3

时间:2014-04-06 03:00:18

标签: actionscript-3 timer

嘿,所有人都无法找到解决这个问题的最简单方法。

基本上我有一个在游戏开始时启动的计时器,如下所示:

//Create new timer object
        tEggTimer = new Timer (nTimerSpeed);
        //Listen for timer intervals
        tEggTimer.addEventListener(TimerEvent.TIMER, addEggs, false, 0, true);
        //start timer
        tEggTimer.start();

nTimerSpeed等于(800);

然后我像这样添加鸡蛋:

private function addEggs(e:TimerEvent):void 
    {
        //var eggGlobalPosition:Point = _Egg.localToGlobal(new Point(_Bunny.x, _Bunny.y));

        _Egg = new mcEgg();
        stage.addChild(_Egg);
        _Egg.x = _Bunny.x;
        _Egg.y = _Bunny.y + 30;
        aEggArray.push(_Egg);
        trace(aEggArray.length);

    }

所以在另一个输入框架函数中,我想将计时器的值更改为(500),但每当我尝试这样时:

tEggTimer = new Timer(500);

tEggTimer.start();

像那样:

private function updateDifficulty():void 
    {
        if (difficultyUpdate) return;

        if (nScore >= 2)
        { 
            tEggTimer.removeEventListener(TimerEvent.TIMER, addEggs);
            tEggTimer.stop();
            tEggTimer = new Timer(200);
            tEggTimer.addEventListener(TimerEvent.TIMER, addEggs);
            tEggTimer.start();

但这并没有做任何事情,只能完全停止计时器。

如何正确减少计时器?

谢谢你们。

4 个答案:

答案 0 :(得分:1)

如果您只想更改定时器速度,同时保持其他所有内容相同,则只需更改定时器对象中的延迟属性即可。

此处示例:

import flash.utils.getTimer;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.MouseEvent;

var speeds:Vector.<int> = new <int>[1000, 2000, 5000];
var currentSpeed:int = 0;

var timer:Timer = new Timer(speeds[currentSpeed]);
function timerTick(inputEvent:TimerEvent):void {
    trace("Timer ticking: "+ getTimer());
}
timer.addEventListener(TimerEvent.TIMER, timerTick, false, 0, true);
timer.start();


function clickedStage(inputEvent:MouseEvent):void {
    currentSpeed = ++currentSpeed % speeds.length;
    timer.delay = speeds[currentSpeed];
    trace("Timer delay set to "+ timer.delay);
}
this.stage.addEventListener(MouseEvent.CLICK, clickedStage, false, 0, true);

单击舞台将更改定时器延迟,从1秒,2秒,5秒和周期。我只是使用getTimer()来显示计时器正在滴答的速率。

请注意,从输出看来,每次更改值时,计时器都会自动重启。

答案 1 :(得分:1)

timer.reset();
timer.delay = 2000;
timer.start();

答案 2 :(得分:0)

可能不是最好的方法,但是,使用nTimerSpeed,让它在每毫秒运行:

tEggTimer = new Timer (1);

然后在你的AddEggs函数中使用nTimerSpeed和一个计数器变量。 counter初始化为0.在if语句中包含所有逻辑,每次通过函数递增计数器。如果counter等于nTimerSpeed,则在if语句和reset计数器中允许它们。

function AddEggs()
{
   if(counter == nTimerSpeed)
   {
       //adding eggs logic
       counter = 0;
   }
   counter++;
}

答案 3 :(得分:0)

在使用500毫秒版本重新实例化之前,您是否尝试过说:tEggTimer.stop()?我猜你的第一个Timer实例会在新的启动时继续触发,除非你刻意停止它。