我正在開發一個非常簡單的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