停止在带有ActionScript 3的Flash中渲染

|| 这是我的问题:我有一些显示对象,这些显示对象已被循环修改,并且我希望Flash在每个循环的末尾精确渲染一帧。循环的持续时间可能会发生不可预测的变化,因此恒定的帧速率将无法实现。 我发现了一种使用hack-ish的方式在每个循环的末尾渲染一帧,方法是使用带有0ms计时器的updateAfterEvent。现在,我要防止Flash在循环的中间渲染帧:这是浪费时间和资源,并且会产生奇怪的闪烁效果。将帧速率设置为0是一个简单的解决方案,但是stage.frameRate的最小值为0.01。 问题1:是否有办法正确停止标准渲染循环? 解决方法将不会被视为有效答案,因为我目前正在做的是一个很好的解决方法(每100秒1帧是可以忍受的)。 问题2:有没有比updateAfterEvent更好的方法来强制渲染? 糟糕,我忘了文明。早上好/下午,请,谢谢。     
已邀请:
使用updateAfterEvent强制在下一个计划的渲染更新之前进行渲染没有任何问题,但是您浪费的计时器是不可取的(太多的函数调用)。相反,请在循环结束时调度您自己的渲染事件,侦听它,然后更新updateEvent()。 就是说,如果我们正在谈论的是for,while等循环,则不应在循环中间看到事物渲染。在同步代码执行期间,Flash不呈现。那部分让我想知道您的代码中到底发生了什么。     
有多种解决方法,尽管这似乎是整个设计的问题,而不是Flash的局限性。我认为长时间循环通常是个坏主意....如果您需要完全控制,我将在屏幕外渲染所有内容,而不是将当前对象附加到DisplayList。这要求addChild \'s将所有内容添加到一个未附加的精灵中,然后在需要时进行绘制。这里的缺点是您不会获得任何mouseevent / keyboardevent。 好像:
var bmp:BitmapData = new BitmapData(800,600,true);
var container:Sprite = new Sprite();

// add all your display objects to the container

stage.addChild(new Bitmap(bmp))

// render loop
for each (var dsp:DisplayObject in objects) {
    // stuff
}

// clear our bitmap
bmp.fillRect(bmp.rect, 0);
bmp.draw(someContainer);
    

要回复问题请先登录注册