var moveTimer:Timer = new Timer(1);
moveTimer.addEventListener(TimerEvent.TIMER, timerListener);
function timerListener (e:TimerEvent):void
{
//code
}
moveTimer.start();
moveTimer.addEventListener(TimerEvent.TIMER_COMPLETE, timerDone)
function timerDone(e:TimerEvent):void
{
upKey = false;
}
嘿,伙计们,这是我的代码。我的游戏中有一些非常简单的人工智能,我试图利用一个计时器来让敌人向前移动大约2-3秒,然后停下来。为了做到这一点,我使用变量upKey作为布尔值,它被设置为真,但是当计时器结束时,它被设置为假,当它被设置为假时,有一个if语句将敌人的速度降低到0。
这是我第一次使用计时器,敌人并没有真正停止…他们就这样一直往前走,直到消失在屏幕上。我这样做是正确的,还是我的代码中的其他地方有问题?还有,有没有更好更有效的方法来使用计时器?
谢谢,詹姆斯。
发布于 2013-05-17 10:51:16
从您引用的代码中可以看出,timer构造函数没有指定repeatCount
,这表示它应该无限重复。对于要调用的timerDone()
处理程序,必须指定重复计数。
此外,请注意,不建议延迟低于20毫秒。
计时器构造函数参数:Timer(delay:Number, repeatCount:int = 0)
delay:Number
-计时器事件之间的延迟,以毫秒为单位。延迟不建议小于20毫秒。计时器频率限制为每秒60帧,这意味着低于16.6毫秒的延迟会导致运行时问题。
repeatCount:int
(默认值= 0) -指定重复次数。如果为零,则计时器无限期重复,最多24.86天(int.MAX_VALUE + 1
)。如果非零,则计时器运行指定的次数,然后停止。
对于动画内容,不建议使用计时器。相反,请使用Event.ENTER_FRAME
来操作基于帧的动画。
一种方法是使用计时器来触发游戏模型的状态更改:
/** timer */
var timer:Timer;
/** whether enemies are advancing */
var advance:Boolean = false;
// start timer at 5-seconds intervals
timer = new Timer(5000);
timer.addEventListener(TimerEvent.TIMER, timerHandler);
timer.start();
// animation controlled by Event.ENTER_FRAME
addEventListener(Event.ENTER_FRAME, frameHandler);
在计时器处理程序中,您可以根据游戏状态调整计时器延迟。
/** timer handler */
function timerHandler(event:TimerEvent):void
{
// stop the current timer
timer.stop();
// depending on the current enemy state
switch (advance)
{
// if true, stop advancing and wait 5-seconds
case true:
trace("Stop advancing, wait 5-seconds");
timer.delay = 5000;
break;
// if false, advance for 2-seconds
case false:
trace("Advance for next 2-seconds");
timer.delay = 2000;
break;
}
// invert advance state.
advance = !advance;
// restart timer
timer.start();
}
同样,在enter帧中,根据游戏状态控制敌人的动画:
/** frame handler, advancing enemy if 'advance' is true */
function frameHandler(event:Event):void
{
if (advance) { /** move enemy forward */ }
}
这会交替你的敌人的状态,输出:
在接下来的2秒内推进
停止前进,等待5秒
前进到下一个2秒
停止前进,等待5秒
为接下来的2秒提供支持
https://stackoverflow.com/questions/16600536
复制相似问题