外部swf在iOS上播放速度非常慢

时间:2012-09-18 16:29:01

标签: ios actionscript-3 flex air flex4.6

我正在编写一个使用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进行测试

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库实例化的资产的类型或名称运行这些行为,并在运行时附加它们

此外,如果您这样做是为了允许更新 - 或修改应用程序,发布后的能力,那么您也可以将其编译到发布版本中,并且只需在下次要更新时再重新发布应用程序。这将在一定程度上帮助您在应用商店中排名,并在线下删除大量版本问题。