1

这是我之前提出但尚未收到答案的问题的较新版本。

我正在开发一个包含许多动画的移动 AIR 应用程序,测试表明使用位图和 GPU 渲染可以在所有移动模型中提供最佳性能。我从应用程序的艺术家那里收到了正常的矢量动画,并构建了一个系统,该系统在运行时循环这些动画并将内容绘制到位图数据中。

我担心的是循环播放电影剪辑的帧。如果我有这些代码行:

for (var i:uint=1; i<mc.totalFrames+1; i++) {
  mc.gotoAndStop(i);
  bitmapData.draw(mc);
}

我不能确定框架在绘制之前是否已“构建”,而我对 Android 平板电脑的测试证明了这一点 -有时框架没有被绘制。

这个 mc 显然不在显示列表中(我们不需要渲染到屏幕上)。那么有没有办法在将框架绘制到位图数据之前确保框架已经构建?(并等待 FRAME_CONSTRUCTED、EXIT_FRAME 等。显然很慢且不需要)

有任何想法吗?谢谢萨尔

更多信息以澄清:

这是一本儿童读物。每个页面都有动画。所有这些动画都是我从开发艺术家(而不是用户)收到的 FLA 中时间轴中的矢量动画。每个页面都有我发布到 swf 的 FLA。

我实际上做的是用它们的位图版本替换加载的 SWF 中的矢量动画。在应用程序运行时,在每个新页面上,我加载 swf,浏览其中的所有动画(循环通过内容的子项),并将每个影片剪辑光栅化为位图数据数组。我的自定义“位图影片剪辑”在显示列表上为每个影片剪辑放置一个替换位图,在 ENTER_FRAME 上,我从数组中切换位图的位图数据。这提供了非常高的性能

4

2 回答 2

0

对不起这是我的错

等待 FRAME_CONSTRUCTED 是答案

于 2013-03-21T09:20:32.143 回答
0

我建议使用闪屏,然后将要转换为位图的 MC 先放到舞台上,然后再绘制到您的 bitmapData。有几个问题让我不得不在实际绘制之前将一个正在绘制的 DisplayObject 放到舞台上,所以这对你来说也可能是一个快速修复。

var splashBD:BitmapData=new BitmapData(stage.stageWidth,stage.stageHeight,false,0xffffff);
var splashBM:Bitmap=new Bitmap(splashBD); // draw a thing as needed here
addChild(splashBM);
addChildAt(MC_to_convert,getChildIndex(splashBM)); 
// then advance it by frames and draw.
于 2013-03-21T09:07:39.287 回答