示例:RuntimeAssetsExplorer

“为 ActionScript 导出”功能非常适合用于在多个项目间使用库的情况。已经导出到 ActionScript 的元件不仅可用于相应的 SWF 文件,还可用于加载该 SWF 文件的同一安全沙箱内的任何 SWF 文件。这样,单个 Flash 文档可生成仅用于保存图形资源的 SWF 文件。该技术对大型项目来说特别有用,比如使用可视资源的设计人员可以与创建“包装”SWF 文件然后在运行时加载图形资源 SWF 文件的开发人员同时工作。您可以使用此方法维护一系列图形资源与编程开发进度无关的版本文件。

RuntimeAssetsExplorer 应用程序加载属于 RuntimeAsset 子类的任何 SWF 文件,并允许您浏览该 SWF 文件的可用资源。示例说明了以下过程:

开始之前,注意每个 SWF 文件必须位于同一个安全沙箱中。有关详细信息,请参阅安全沙箱

要获取该范例的应用程序文件,请访问 www.adobe.com/go/learn_programmingAS3samples_flash_cn。RuntimeAssetsExplorer 应用程序文件位于文件夹 Samples/RuntimeAssetsExplorer 中。该应用程序包含以下文件:

文件

说明

RuntimeAssetsExample.mxml

RuntimeAssetsExample.fla

适用于 Flex (MXML) 或 Flash (FLA) 的应用程序的用户界面。

GeometricAssets.as

用于实现 RuntimeAsset 接口的示例类。

GeometricAssets.fla

链接到 GeometricAssets 类的 FLA 文件(该类是 FLA 的文档类)包含为 ActionScript 导出的元件。

com/example/programmingas3/runtimeassetsexplorer/RuntimeLibrary.as

用于定义将加载到浏览器容器中的所有运行时资源 SWF 文件所需方法的接口。

com/example/programmingas3/runtimeassetsexplorer/AnimatingBox.as

形状为旋转方框的库元件的类。

com/example/programmingas3/runtimeassetsexplorer/AnimatingStar.as

形状为旋转星形的库元件的类。

建立运行时库界面

若要使浏览器与 SWF 库正确交互,运行时资源库的结构就必须具有一定程式。我们将通过创建一个接口(在用于区分预期结构的方法蓝图方面,它类似于一个类,但它又不像是一个类,因为它不包括方法体)来完成此过程。接口提供了在运行时库和浏览器之间相互通信的方法。加载到浏览器中的运行时资源的每个 SWF 都将实现此接口。有关接口和如何使用接口的详细信息,请参阅接口

RuntimeLibrary 接口非常简单 ― 我们只需要能够为浏览器提供类路径数组以导出元件并使元件在运行时库中可用的函数。为此,该接口具有单个方法:getAssets()

package com.example.programmingas3.runtimeassetexplorer
{
    public interface RuntimeLibrary
    {
        function getAssets():Array;
    }
}

创建资源库 SWF 文件

通过定义 RuntimeLibrary 界面,可以创建能够加载到另一个 SWF 文件中的多个资源库 SWF 文件。制作资源的单个 SWF 库包括四个任务:

创建一个类以实现 RuntimeLibrary 接口

下一步,我们将创建用于实现 RuntimeLibrary 接口的 GeometricAssets 类。它将是 FLA 的文档类。此类的代码与 RuntimeLibrary 接口非常相似,它们之间的不同在于,在类定义中,getAssets() 方法具有方法体。

package
{
    import flash.display.Sprite;
    import com.example.programmingas3.runtimeassetexplorer.RuntimeLibrary;
    
    public class GeometricAssets extends Sprite implements RuntimeLibrary 
    {
        public function GeometricAssets() {
            
        }
        public function getAssets():Array {
            return [ "com.example.programmingas3.runtimeassetexplorer.AnimatingBox",
                     "com.example.programmingas3.runtimeassetexplorer.AnimatingStar" ];    
        }
    }
}

如果要创建第二个运行时库,可以创建另一个基于其它类(例如 AnimationAssets)的 FLA,该类可提供自带的 getAssets() 实现。

为每个 MovieClip 资源创建类

对于本示例,我们将只扩展 MovieClip 类而不对自定义资源添加任何功能。以下 AnimatingStar 的代码类似于 AnimatingBox 的代码:

package com.example.programmingas3.runtimeassetexplorer
{
    import flash.display.MovieClip;
    
    public class AnimatingStar extends MovieClip
    {
        public function AnimatingStar() {
        }
    }
}

发布库

现在将基于 MovieClip 的资源连接到新类,方法是创建一个新的 FLA 并在“属性”检查器的“文档类”字段中输入 GeometricAssets。为达到本示例的目的,我们将创建两个使用时间轴补间的非常基本的形状,其中一个形状顺时针旋转超过 360 帧。animatingBoxanimatingStar 元件都设为“为 ActionScript 导出”,并将“类”字段设置为 getAssets() 实现中指定的对应类路径。保留 flash.display.MovieClip 的默认基类,因为我们希望对标准 MovieClip 方法进行子分类。

在设置完元件导出设置后,发布 FLA。现在您便拥有第一个运行时库了。该 SWF 文件可以加载到另一个 AVM2 SWF 文件中,且 AnimatingBox 和 AnimatingStar 元件可用于新的 SWF 文件。

将库加载到另一个 SWF 文件中

要处理的最后一个功能性部分是资源浏览器的用户界面。在本示例中,运行时库的路径硬编码为一个名为 ASSETS_PATH 的变量。或者,您也可以使用 FileReference 类。例如,创建浏览以查找硬盘上特定 SWF 文件的界面。

成功加载运行时库后,Flash Player 会调用 runtimeAssetsLoadComplete() 方法:

private function runtimeAssetsLoadComplete(event:Event):void
{
    var rl:* = event.target.content;
    var assetList:Array = rl.getAssets();
    populateDropdown(assetList);
    stage.frameRate = 60;
}

在此方法中,变量 rl 表示已加载的 SWF 文件。代码将调用已加载的 SWF 文件的 getAssets() 方法,获取可用资源的列表,并通过调用 populateDropDown() 方法用这些资源填充具有可用资源列表的 ComboBox 组件。该方法会依次存储每个资源的完整类路径。单击用户界面上的“添加”按扭即会触发 addAsset() 方法:

private function addAsset():void
{
    var className:String = assetNameCbo.selectedItem.data;
    var AssetClass:Class = getDefinitionByName(className) as Class;
    var mc:MovieClip = new AssetClass();
    ...
}

此方法将获取 ComboBox 中当前所选资源的类路径 (assetNameCbo.selectedItem.data),并使用 getDefinitionByName() 函数(来自 flash.utils 包)获取对该资源的类的实际引用,以创建该资源的新实例。


Flash CS3

 

评论添加到页面后给我发送电子邮件 | 评论报告

当前页: http://livedocs.adobe.com/flash/9.0_cn/main/00000217.html