Flash TimerEvent.Timer事件对所有对象全局可访问的计时器对象
我正在用Flash开发一个非常简单的游戏。我想让所有的动画帧率不可知,这样我就可以改变帧率而不影响游戏的流量和速度。 我在某个地方读到,如果您想这样做,您只需创建一个计时器对象并将事件侦听器附加到此计时器 如果我有许多对象必须听同一个计时器怎么办?查看代码以了解我正在尝试执行的操作。在这个阶段,没有任何东西会中断,但事件不会触发 以下是主类,即在swf执行上运行的类:Flash TimerEvent.Timer事件对所有对象全局可访问的计时器对象,flash,actionscript-3,adobe,Flash,Actionscript 3,Adobe,我正在用Flash开发一个非常简单的游戏。我想让所有的动画帧率不可知,这样我就可以改变帧率而不影响游戏的流量和速度。 我在某个地方读到,如果您想这样做,您只需创建一个计时器对象并将事件侦听器附加到此计时器 如果我有许多对象必须听同一个计时器怎么办?查看代码以了解我正在尝试执行的操作。在这个阶段,没有任何东西会中断,但事件不会触发 以下是主类,即在swf执行上运行的类: public class Main extends MovieClip { private static var _s
public class Main extends MovieClip {
private static var _stage:Stage;
private static var _timer:Timer;
public function Main() {
trace("STARTING_GAME");
init();
}
private function init(){
var player:Player = new Player(100);
this.addChild(player);
_stage = this.stage
_timer = new Timer(30);
}
public static function get stage():Stage{
return _stage;
}
public static function get timer():Timer{
return _timer;
}
}
这是Player类,需要计时器的对象之一:
public class Player extends MovieClip {
private var playerHealth:int;
public function Player(_health:int=100) {
init(_health);
}
private function init(_health:int){
trace("creating player object");
playerHealth = _health;
addEventListeners();
trace(Main.timer); //this returns [object timer] - so it's supposed to work?
}
private function addEventListeners(){
Main.timer.addEventListener(TimerEvent.TIMER, ef_Repaint);
//this.addEventListener(Event.ENTER_FRAME, ef_Repaint);
}
private function ef_Repaint(e:Event):void{
trace("timer event firing");
}
}
提前谢谢 你应该启动计时器
private function addEventListeners(){
Main.timer.addEventListener(TimerEvent.TIMER, ef_Repaint);
Main.timer.Start();
}
Timer类说:
计时器不会自动启动;必须调用start()方法才能启动它
还要注意的是,使用计时器并不是最好的方法。最好继续使用事件。输入_FRAME
并仅在所需延迟已过时执行代码:
private function ef_Repaint(e:Event):void{ // Event.ENTER_FRAME
var timeNow = getTimer();
if (timeNow - previousTime > 30) { // you can replace 30 with any delay you want
previousTime = timeNow;
// your code here
}
}
最后,如果您使用这两种方法中的任何一种,您都不应该在每个对象中单独收听TimerEvent.TIMER
或TimerEvent.TIMER
。您应该在Main
然后在你的对象上循环并要求它们更新。拥有多个事件侦听器对性能没有好处,它们可能会以您不期望的顺序被调用,并且您可能会遇到无法理解的错误。Hehe。。。对的这是我经常犯的经典错误之一。:)另外,请参阅我的最新答案。如果可能的话,试着改变你的方法。谢谢-我错过了start()部分:)我还将事件侦听器移到了我的主类。把它放在那里会更有意义,因为我以前就因为它而有记忆问题。谢谢