Actionscript 3 如何将计时器增加为3

Actionscript 3 如何将计时器增加为3,actionscript-3,timer,Actionscript 3,Timer,嘿,每个人都不能真正找出解决这个问题的最简单方法 基本上,我有一个计时器,在游戏开始时启动,如下所示: //Create new timer object tEggTimer = new Timer (nTimerSpeed); //Listen for timer intervals tEggTimer.addEventListener(TimerEvent.TIMER, addEggs, false, 0, true); //s

嘿,每个人都不能真正找出解决这个问题的最简单方法

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

//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);

    }
因此,在另一个enter frame函数中,我想将计时器的值更改为(500),但每当我这样尝试时:

tEggTimer=新定时器(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();
但这只会完全停止计时器

如何正确减少计时器


谢谢大家。

也许不是最好的方法,但是使用nTimerSpeed,让它每毫秒运行一次:

tEggTimer = new Timer (1);
然后在AddEggs函数中使用nTimerSpeed和一个计数器变量。计数器初始化为0。在if语句中使用所有逻辑时,每次通过函数递增计数器。如果计数器等于nTimerSpeed,则在if语句和重置计数器中允许它们

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

您是否尝试在500毫秒版本重新实例化之前说:
tEggTimer.stop()
?我猜你的第一个计时器实例将在新实例启动时继续启动,除非你故意停止它

如果您只想更改计时器速度,同时保持所有其他内容不变,则可以只更改计时器对象中的延迟属性

此处示例:

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);
import flash.utils.getTimer;
导入flash.utils.Timer;
导入flash.events.TimerEvent;
导入flash.events.MouseEvent;
var速度:矢量新的[100020005000];
无功电流速度:int=0;
var定时器:定时器=新定时器(速度[当前速度]);
函数timerTick(inputEvent:TimerEvent):无效{
跟踪(“计时器滴答:+getTimer());
}
timer.addEventListener(TimerEvent.timer,timerTick,false,0,true);
timer.start();
函数clickedStage(inputEvent:MouseeEvent):无效{
currentSpeed=++currentSpeed%speeds.length;
timer.delay=速度[当前速度];
跟踪(“定时器延迟设置为”+定时器延迟);
}
this.stage.addEventListener(MouseEvent.CLICK,clickedStage,false,0,true);
点击阶段将改变计时器延迟,从1秒、2秒、5秒和循环。我只是使用getTimer()来显示计时器的运行速度


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

Hmm不完全确定如何实现这一点。我试着让你知道不,我没有。我曾经尝试过的是:tEggTimer=newtimer(500);tEggTimer.reset();tEggTimer.start();请尝试我的建议,并让我知道它是如何进行的。是的,我尝试了,但我没有得到任何消息。我更新我的帖子可能会有助于了解更多细节。我得到以下错误:隐式强制类型flash的值。utils:Timer到一个不相关的类型类。它是否说明它在哪一行?试着把它放到一个空白的新fla中(我假设你使用的是flash ide)。嗯,在一个新fla中它似乎工作得很好。也许我做错了什么,我会再试一次,我不知道=但是在我的例子中,设置timer.delay(或者代码中的tEggTimer.delay)才是最关键的部分。所以我在前面给出了它,现在没有错误了。但它似乎不能正常工作。我能做到这一点吗。因为我想让计时器的滴答声更快[1000800500]?我希望它从1000开始,然后在If语句中激活时,将其减少到800,如我的示例所示
timer.reset();
timer.delay = 2000;
timer.start();