ムービークリップの例:RuntimeAssetsExplorer

Flash Player 9 以降、Adobe AIR 1.0 以降

ActionScript に書き出す機能は、特にライブラリに有効で、複数のプロジェクトで役立つ場合があります。 Flash Player または AIR で SWF ファイルを実行する場合、ActionScript に書き出されたシンボルは、SWF ファイルをロードする同じセキュリティサンドボックス内のすべての SWF ファイルで使用できます。このようにすると、単一の Flash ドキュメントでグラフィカルアセット保持専用の SWF ファイルを生成できます。 この方法は特に、大規模なプロジェクトで、ビジュアルアセットを担当する複数のデザイナーが「ラッパー」SWF ファイルを作成する複数の開発者と平行して作業を行い、実行時にグラフィカルアセットの SWF ファイルをロードする場合に役立ちます。この方法を使用すると、一連のバージョン化されたファイルの管理が可能です。この場合、グラフィカルアセットはプログラミング開発の進捗に依存しません。

RuntimeAssetsExplorer アプリケーションは RuntimeAsset のサブクラスであるすべての SWF ファイルをロードします。このため、SWF ファイルの利用可能なアセットを参照できます。 この例では、次の内容について説明します。

  • Loader.load() を使用した外部 SWF ファイルのロード

  • ActionScript に書き出されるライブラリシンボルの動的な作成

  • MovieClip 再生の ActionScript による制御

操作を開始する前に、各 SWF ファイルを同じセキュリティサンドボックスに置く必要があることに注意してください。詳しくは、セキュリティサンドボックスを参照してください。

このサンプルのアプリケーションのファイルを入手するには、Flash Professional のサンプルをダウンロードしてください。RuntimeAssetsExplorer アプリケーションのファイルは、Samples/Chapters/RuntimeAssetsExplorer フォルダーにあります。 このアプリケーションは次のファイルで構成されています。

ファイル

説明

RuntimeAssetsExample.mxml

または

RuntimeAssetsExample.fla

アプリケーションのユーザーインターフェイスです(Flex 用の MXML、または Flash 用の FLA)。

RuntimeAssetsExample.as

Flash アプリケーション(FLA)のドキュメントクラスです。

GeometricAssets.as

RuntimeAsset インターフェイスを実装するサンプルクラスです。

GeometricAssets.fla

ActionScript 用に書き出されるシンボルを含んでいる GeometricAssets クラス(FLA のドキュメントクラス)にリンクされている FLA ファイル。

com/example/programmingas3/runtimeassetexplorer/RuntimeLibrary.as

エクスプローラーコンテナにロードされるすべてのランタイムアセット SWF ファイルに必要なメソッドを定義するインターフェイスです。

com/example/programmingas3/runtimeassetexplorer/AnimatingBox.as

回転するボックス形のライブラリシンボルのクラスです。

com/example/programmingas3/runtimeassetexplorer/AnimatingStar.as

回転する星形のライブラリシンボルのクラスです。

ランタイムライブラリインターフェイスの確立

エクスプローラーで正しく SWF ライブラリを操作できるようにするには、ランタイムアセットライブラリの構造を形式化する必要があります。 構造を形式化するには、インタフェースを作成します。これはメソッドの設計図であり、目的の構造を定義するという点ではクラスに似ていますが、メソッド本体は提供しない点がクラスとは異なります。インターフェイスを使用すると、ランタイムライブラリとエクスプローラーが相互にやり取りできます。 ブラウザーにロードされるランタイムアセットの SWF はそれぞれ、このインターフェイスを実装します。 インターフェイスとその利便性について詳しくは、『ActionScript 3.0 の学習』のインターフェイスに関する内容を参照してください。

RuntimeLibrary インターフェイスは非常にシンプルです。必要なのは、書き出されるシンボルのクラスパスの配列をエクスプローラーに提供でき、ランタイムライブラリで使用可能な関数だけです。このため、インタフェースには getAssets() というメソッドだけを含めます。

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

アセットライブラリ SWF ファイルの作成

RuntimeLibrary インタフェースを定義すると、別の SWF ファイルにロード可能な複数のアセットライブラリ SWF ファイルを作成できます。個々の SWF アセットライブラリを作成する際には、次の 4 つのタスクを実行します。

  • アセットライブラリ 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" ];     
        } 
    } 
}

2 番目のランタイムライブラリを作成する場合は、独自の getAssets() を実装する AnimationAssets などの別のクラスをベースにした別の FLA を作成できます。

各 MovieClip アセット用クラスの作成

この例では、カスタムアセットに機能を追加することなく、MovieClip クラスの拡張のみを行います。次の AnimatingStar のコードは、AnimatingBox のコードと類似しています。

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

ライブラリのパブリッシュ

次に、新しい FLA を作成し、プロパティインスペクターの「ドキュメントクラス」フィールドに GeometricAssets を入力して、MovieClip ベースのアセットと新しいクラスを接続します。この例では、タイムライントゥイーンを使用して、360 フレームを時計回りに 1 回転する 2 つの基本シェイプを作成しています。animatingBox および animatingStar のシンボルはいずれも「ActionScript に書き出し」に設定され、「クラス」フィールドは getAssets() の実装で指定されたそれぞれのクラスパスに設定されます。標準の MovieClip メソッドをサブクラスにする必要があるので、デフォルトのベースクラスである flash.display.MovieClip は変更されません。

シンボルの書き出し設定を指定したら、FLA をパブリッシュします。これで、最初のランタイムライブラリが設定されます。この SWF は別の AVM2 SWF ファイルにロードできます。また、AnimatingBox および AnimatingStar のシンボルは新しい SWF ファイルでも使用できます。

別の SWF ファイルへのライブラリのロード

必要な最後の機能は、アセットエクスプローラーのユーザーインターフェイスです。 この例では、ランタイムライブラリのパスは、ASSETS_PATH という名前の変数としてハードコードされています。また、FileReference クラスを使用して、ハードドライブ上の特定の SWF ファイルを参照するインターフェイスの作成などを行うこともできます。

ランタイムライブラリが正常にロードされると、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)、flash.utils パッケージから getDefinitionByName() 関数を使用して、アセットのクラスに対する実際の参照が入手され、そのアセットの新規インスタンスが作成されます。