2013-02-06 75 views
0

通常我會聽ENTER_FRAME事件並在每次幀渲染時執行代碼。但對於我的應用程序來說,這太慢了。 2個ENTER_FRAME事件之間的時間間隔爲40毫秒。如果我更改幀率,無所謂。stage stage render/redraw

那麼是否有可能強制閃光重繪/渲染幀而不聽事件?我嘗試了stage.invalidate()方法並更改幀率,但它並沒有改善任何東西(stage.invalidate()實際上沒有做任何事情)

我做了一個小測試,看看ENTER_FRAME和EXIT_FRAME事件:

private var beginTime:Number; 
private var endTime:Number; 

public function init():void { 
    addEventListener(Event.ENTER_FRAME, enterFrame); 
    addEventListener(Event.EXIT_FRAME, exitFrame); 
} 

private function enterFrame(e:Event):void { 
    beginTime = new Date().getTime(); 

    if(endTime) { 
     trace(beginTime - endTime); 
    } 
} 

private function exitFrame(e:Event):void { 
    endTime = new Date().getTime(); 
} 

如果我右邊的ENTER_FRAME事件是幀的渲染之前觸發和EXIT_FRAME事件被渲染後被解僱。所以在EXIT_FRAME事件之後,渲染完成,應用程序將發送一個ENTER_FRAME事件。 這兩個事件之間的平均時間爲52毫秒。我希望縮短那個時候

Bytheway我已經把我的幀率180這個測試

+0

你能否更新你的問題更具體?也許顯示一些代碼? –

+8

無論這是否可能,這可能實際上是一個壞主意。 如果ENTER_FRAME事件之間的時間間隔爲40毫秒,即使您更改了幀速率,那也可能是因爲渲染舞臺需要至少40毫秒。 試圖更頻繁地渲染它可能不會讓你的應用更快 –

+1

蒂莫西的建議非常好。嘗試配置您的應用程序以查找內存或CPU中的潛在瓶頸。你也可以試試[Scout](http://gotoandlearn.com/play.php?id=175) –

回答

1

stage.Invalidate將迫使階段重繪。它沒有建議你應該先解決你的時間問題。