例 : RuntimeAssetsExplorer

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

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

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

このサンプル用のアプリケーションのファイルを入手するには、www.adobe.com/go/learn_programmingAS3samples_flash_jp を参照してください。RuntimeAssetsExplorer アプリケーションのファイルは、"Samples/Chapters/RuntimeAssetsExplorer" フォルダにあります。アプリケーションは、次のファイルで構成されています。

ファイル

説明

RuntimeAssetsExample.mxml

または

RuntimeAssetsExample.fla

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

GeometricAssets.as

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

GeometricAssets.fla

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

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 アセットライブラリを作成する際には、次の 4 つのタスクを実行します。

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 ファイルを参照するインターフェイスの作成などを行うこともできます。

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


 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000217.html