2

我正在使用 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 frame 事件侦听器,但没有任何改变。

提前致谢。

编辑:我发现了一些非常奇怪的东西。当我从具有快速配置的应用程序运行应用程序时,它运行得很快。但是当我发布它或在运行时使用标准选项时,它的运行速度非常慢。经 AIR 3.2 测试

4

2 回答 2

0

尝试将渲染模式设置为直接:

<renderMode>direct</renderMode>

请记住,当您专门渲染到 GPU 时,如果您正在渲染动画,它会减慢速度。尽管渲染到 GPU 速度很快,但将显存分配给 GPU 却很慢。如果您将独占性渲染到 GPU,则在每一帧上,都需要更新视频内存。

另一件事是所有矢量都将被光栅化,因此有些东西会呈现像素化。

于 2012-09-19T20:18:01.073 回答
0

有几件事:

不允许在 AIR for iOS 中加载其中包含任何代码的 SWF。这是苹果公司禁止的。

在为 iOS 编译时,您最多只能将 swf 用作图形/资源库。如果里面的movieclip有stop(); 在其中一个帧上,那么这将被视为引擎盖下的“addFrameScript()”,这意味着 SWF 包含 ActionScript。

我建议如果您需要这样的功能,请创建一个预定义行为列表以编译到您的主应用程序中,然后根据您从 SWF 库中实例化的资产的类型或名称运行这些行为,并在运行时附加它们。

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

于 2012-09-20T12:37:04.617 回答