嘿,所有人都无法找到解决这个问题的最简单方法。
基本上我有一个在游戏开始时启动的计时器,如下所示:
//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();
但这并没有做任何事情,只能完全停止计时器。
如何正确减少计时器?
谢谢你们。
答案 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实例会在新的启动时继续触发,除非你刻意停止它。