我正在开发一个非常简单的Flash游戏。我想让所有动画帧速率不可知,以便我可以改变帧速率而不影响游戏的流程和速度。 我在某处读过,如果你想这样做,你只需创建一个Timer对象并将一个事件监听器附加到这个计时器。TimerEvent.TIMER事件的Timer对象可以全局访问所有对象
如果我有很多需要听同一个定时器的对象会怎么样?查看代码以了解我正在尝试执行的操作。在这个阶段没有什么能够打破,但是这个事件并没有发生。
这里是主类,即对SWF执行运行一个:
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;
}
}
这里是球员类,那也将需要定时器的对象之一:
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");
}
}
提前致谢!
嘿嘿......正确!这是我经常犯的经典错误之一。 – 2012-02-16 13:01:49
:)另外,请参阅我更新的答案。如果可能的话,尝试改变你的方法。 – sch 2012-02-16 13:11:38
谢谢 - 我错过了开始()部分:)我也将事件监听器移到了我的Main类。把它放在那里会更有意义,因为之前我有过内存问题。谢谢! – getack 2012-02-16 16:05:09