2013-02-06 42 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将迫使阶段重绘。它没有建议你应该先解决你的时间问题。