我正在编写一个使用as3和adobe air的应用程序来加载外部SWF文件并在应用程序内部播放它们。容器与android工作得很好,外部swf文件的动画非常酷。
然而,在iOS(iPad 2)上,它运行速度非常慢,就像它每秒只播放1帧一样。
无论如何都要让它更快地发挥。
我的应用程序配置如下:
<initialWindow>
<autoOrients>false</autoOrients>
<aspectRatio>landscape</aspectRatio>
<renderMode>gpu</renderMode>
<fullScreen>false</fullScreen>
<visible>true</visible>
<softKeyboardBehavior>none</softKeyboardBehavior>
</initialWindow>
这是加载外部swf的代码部分:
public function set url(value:String):void
{
_url = value;
object.source = File.applicationDirectory.resolvePath(value).url;
object.addEventListener(Event.COMPLETE , onLoaded);
}
protected function onLoaded(event:Event):void
{
object.addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
protected function onEnterFrame(event:Event):void
{
if((object.content as Object).currentFrameLabel == "stop")
(object.content as Object).stop();
}
我还试图评论Enter帧事件监听器,但没有改变。
提前致谢。
编辑: 我发现了一些非常奇怪的东西。当我使用快速配置从应用程序运行应用程序时,它运行速度很快。但是当我发布它或在运行它时使用标准选项时运行速度非常慢。 使用AIR 3.2进行测试
答案 0 :(得分:0)
尝试将渲染模式设置为直接:
<renderMode>direct</renderMode>
请记住,当您专门渲染GPU时,如果要渲染动画,它会降低速度。尽管渲染到GPU很快,但将视频内存分配给GPU的速度很慢。如果您向GPU渲染独占性,则在每个帧上都需要更新视频内存。
另一件事是所有的矢量都会被栅格化,因此有些东西会呈现像素化。
答案 1 :(得分:0)
有几件事:
在AIR for iOS中,不允许加载包含任何代码的SWF。 Apple禁止这样做。
在编译iOS时,您最多只能使用swf作为图形/资源库。如果里面的movieclip有stop();在其中一个框架上,然后在引擎盖下计为“addFrameScript()”,这意味着SWF包含ActionScript。
我建议你是否需要这样的功能,创建一个预编译行为列表,将其编译到主应用程序中,然后根据您从SWF库实例化的资产的类型或名称运行这些行为,并在运行时附加它们
此外,如果您这样做是为了允许更新 - 或修改应用程序,发布后的能力,那么您也可以将其编译到发布版本中,并且只需在下次要更新时再重新发布应用程序。这将在一定程度上帮助您在应用商店中排名,并在线下删除大量版本问题。