1

Flash Professional と Flash Builder を利用するプロジェクトに取り組んでいます。アート チームは Flash Pro でアセットを作成し、プロジェクトを SWC として公開します。次に、SWC を Flash Builder プロジェクトの lib ディレクトリにコピーし、そこからアセットにアクセスします。

アートチームは同じタイプのものをたくさん作成しています。彼らがたくさんのトカゲのシンボル/コンポーネントを作っているとしましょう。これらのトカゲはすべて類似したアニメーション (walk_left、walk_right など) を持っているため、アニメーションのキーフレームに関連する定数 (WALK_RIGHT_START、WALK_RIGHT_END など) が ActionScript で定義されています。

Flex 側からは、どのリザードをロードしても、左に歩くように指示できるようにしたいと考えています。そこで、Flash Professional でスーパークラスを作成し、Flash Professional のトカゲ用のすべての AS クラスがこのクラスを拡張するようになりました - Lizard.as

これで問題ありませんが、トカゲをさらに複雑にしたい場合は、Flash Pro プロジェクトを開いてクラスを編集し、SWC を再コンパイルして Flex に送り返し、その後、テストしてください。Lizard スーパークラスを Flex で編集できるようにしたいので、Flex で別のスーパークラスを作成しました: Lizard.mxml

Flex では、現在、各トカゲ コンポーネント ( Gecko.mxmlなど) はLizard.mxmlを拡張しており、それぞれSWC で定義された AS コンポーネント (この場合はGecko.as ) が含まれています。

これはかなり複雑に思えます: AS スーパークラスを拡張する AS コンポーネントを含む、mxml スーパークラスを拡張する mxml コンポーネント。

私がやりたいのは、Flex プロジェクトで 1 つのスーパークラスを定義し、Flash Pro で定義したコンポーネントでこのクラスを拡張し (これは不可能だと私が信じている部分です)、次に Flex コンポーネント (Gecko.mxml) でそれらを拡張することです。

これを行う方法はありますか?

4

1 に答える 1

1

クラスを変更することはできません。拡張することしかできません。

数年前、私はインターフェースがFlashで行われ、flexコンパイラーでコンパイルされるプロジェクトに取り組んでいました。

さまざまなクラスで構成されるさまざまなUIコンポーネントがありました。しかし、私が入れていたロジックでは、それらを同じように扱う必要がありました。つまり、すべてのクラスが同じ基本クラスを持っている必要があり、それは私自身の基本クラスによって必要でした。そのため、ボタンとリストの両方でcustomUIClassを拡張する必要がありました。私の知る限り、あなたはできません(これを読んでいて、方法を知っているなら、私に知らせてください)

私の解決策はラッパーを作成することでした。

あなたの問題に適用されると、このようなものになります

  • MovieClip(またはcasaMovieClip)を拡張するLizard(または動物、生物など)と呼ばれる「スーパークラス」を作成します。
  • トカゲは変数を持っているでしょうprivate var _view:MovieClip
  • およびinitコンストラクター'init($ type:MovieClip)`(実際のコンストラクターではありません)
  • ここで_view=$type、ビューを追加しますaddChild(_view);

次に、このようなアクションを作成します

function walk():void{
   _view.gotoAndPlay("WALK");
} 

最後に、Lizardを拡張するGeckoクラスを作成し、これをコンストラクターとして使用します。

function Gecko(){
   init(new flaGecko());
}

それでも関数をオーバーライドする必要がある場合は、それを行うことができます

または、作成することもできますvar gecko:Lizard = new Lizard(new flaGecko());が、その場合はinit()をコンストラクターにする必要があります。

詳細については、デコレータデザインパターンを調べてください。AS3デザインパターンの本が非常に役立つことがわかりました。

于 2011-02-04T20:50:42.353 に答える