这是我的问题:我有一些由循环修改的显示对象,我希望flash在每个循环结束时正好渲染一帧。循环的持续时间可能不可预测地变化,因此恒定的帧速率将不会这样做。
我找到了一种在每个循环结束时渲染一帧的黑客方法,使用带有0ms计时器的updateAfterEvent。现在我想阻止Flash在循环中间渲染帧:这是浪费时间和资源,并产生奇怪的闪烁效果。将帧速率设置为0将是一个简单的解决方案,但stage.frameRate的最小值为0.01。
问题1:有没有办法正确停止标准渲染循环? 解决方法不会被视为一个有效的答案,因为我目前正在做的是一个非常好的解决方法(每100秒1帧是可以忍受的)。
问题2:有没有比updateAfterEvent强制渲染更好的方法?
哎呀,我忘记了文明。早上好/下午好,请提前谢谢。答案 0 :(得分:1)
使用updateAfterEvent在下一次调度渲染更新之前强制渲染没有任何问题,但是浪费的计时器是不合需要的(函数调用太多)。相反,在循环结束时调度你自己的渲染事件,监听它,然后再调用updateAfterEvent()。
那就是说,你不应该看到在循环中间呈现的东西,如果我们所讨论的是for,while,etc ..循环。在同步代码执行期间,Flash不会呈现。那部分让我想知道你的代码到底发生了什么。
答案 1 :(得分:1)
有不同的方法可以解决这个问题,虽然这似乎是整体设计的一个问题,而不是Flash中的限制。我认为很长一段时间循环往往是一个坏主意....如果你需要完全控制我会在屏幕外渲染所有内容而不是将当前对象附加到DisplayList。这需要addChild将所有内容都添加到非附加的精灵中,然后在需要时绘制它。这里的缺点是你不会得到任何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);