2009-06-21 2 views
6

クラス名でエクスポートされた何百ものMovieClipを持つArtLibrary.swfファイルがあります。これらのムービーを、私が作業している複数の異なるフラッシュファイルで使用できるようにしたいのですが、コマンドを使用して埋め込んだ後、それらを正しく参照する方法がわかりません。AS3は、各クラスを別々に参照することなく、外部swfにすべてのクラスを埋め込みまたはインポートします。

次作品:この例では

[Embed(source="ArtLibrary.swf", symbol="BirdBodyColor_mc")] 
var BirdBodyColor_mc:Class; 

myMC:MovieClip = new BirdBodyColor_mc(); 
addChild(myMC); 

、私は、「マスタークラス」内の個々のクラスを参照するかどうかはわかりません。

[Embed(source="ArtLibrary.swf")] 
var MasterClass:Class; 

myMC:MovieClip = new BirdBodyColor_mc(); 
addChild(myMC.BirdBodyColor_mc); 

答えて

4

SWFを使用するのではなく、SWCを使用する方がよいでしょう。 SWCを作成するには、Flash Proの公開設定に入り、[Flash]タブに移動して[SWCの書き出し]を選択します。 SWCには、SWFと、SWF内のクラスについてFlashが知る必要があるすべての情報を含む特別なマニフェストが含まれています。

他のプロジェクトでSWCを使用するには、AS3の設定(公開設定の[Flash]タブ)でライブラリパスタブに移動し、SWCを追加します(絶対パスと相対パスの両方がうまく機能します)。

これはCS4またはFlexでのみ機能することに注意してください(FlexではプロジェクトにSWCをドラッグできますが、その点を確認します)。

今、SWFをロードして実行時にそのアセットを使用する場合は、ワックスのボールがまったく違っています。これが正しく動作するためには、クラスが適切なドメインに配置されるように、LoaderクラスとApplicationDomainを使いこなす必要があります。ここでは、件名にいくつかの良い情報があります:

http://www.kirupa.com/forum/showpost.php?p=2123134&postcount=366

4

だから、これはCS4は、それ自身の利益のためにあまりにもスマートであることの場合です。 はコンパイラがコンパイル時に決定する方法で問題のクラスを参照することはありません。そのため、SWF内にはこれらのクラスが含まれていないため、エラーになります。

Flexでは、これをコマンドライン引数で回避できますが、CS4ではそうではありません。代わりに、コンパイラが理解できる方法で、少なくとも1回は使用したいクラスを明示的に参照します。たとえば、クラスを「TestCircle」に設定したシンボルを含むシンプルなSWCを作成しました。 SWCを使用したコードでは、私は次のコードを持っていたし、それがうまく働いた:

import flash.utils.getDefinitionByName; 

TestCircle; 

var test:MovieClip = new (getDefinitionByName("TestCircle") as Class)(); 

addChild(test); 

あなたが開いSWCを割るだろう小さなスクリプトを書くことができ空想を得るように感じた場合は(それだけでzipファイルです)内部にあるXMLマニフェストを読み込み、特別な "includer"クラスを自動的に作成します。しかし、彼らが言うように - 私はそれを読者のための運動として残すでしょう! ;-)

希望に役立ちます!

+0

"フレックスでは、コマンドライン引数でこれを回避することができます。"私はそのコマンドラインを探していますが、見つけられません。どちらですか? http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7a92.html – vazor

0

私はまだインポートされた各クラスを参照するスクリプトとして手動で作成された長いスクリプトを書き留めています。与えられた行はembedメソッドよりもはるかに短く、1つの用語ですらあります。

私はArtLibrary.flaを作成してから、そのflaのライブラリのすべてのフォルダをコピーして5つの他のflaに貼り付けました。私はswfファイルのコンパイルに気を使わなかった。私の必要性のために、最も効果的でした。

ありがとうございました。あなたの答えはまっすぐであり、非常に詳細でした。

3

はあなたが 亀裂SWCを(それだけのzip ファイルです)を開きます小さなスクリプトを書くことができ、内部 をだXMLマニフェストを読んで、 「includer」特別を作成空想を得るように感じた場合は自動的にクラスです。しかし、彼らが言うように - 私はそれを リーダーの練習として残します! ;-)

何もする必要はありません(ありがたいことに!)。 include-librariesコンパイラ引数にはSWC内のすべてのクラスが自動的に含まれ、getDefinitionByNameメソッドが期待どおりに機能するようになります。

あなたのApp-config.xmlファイルで

(あるいはコンパイラへの引数として直接渡さ):

<include-libraries> 
    <library>path/to/your.swc</library> 
</include-libraries> 

その後、あなたは通常通りgetDefinitionByNameを使用するのは自由です。

HTH。

2

FlashDevelopを使用すると、これは簡単に修正できます。

プロジェクトリストから、含まれているswcを右クリックします。オプションを選択し、「ライブラリを含める(完全ライブラリ)」を選択します。

..ここで、getDefinitionByNameを使用して、swcファイルから参照されないクラスを取得できるようになりました。

関連する問題