2009-03-25 13 views
1

私はいくつかのライブラリアセットに使用するMovieClipサブクラス(MyClipと呼ぶ)を作成しています。 ActionScriptコードからこれらのムービークリップをインスタンス化します。 MyClipには、特定のプロパティの初期値を設定できるコンストラクタパラメータがあります。AS3自動作成アセットクラスのコンストラクタへのパラメータの受け渡し

私はそれを複数のライブラリアセットに使用したいので、それを行う論理的な方法は、 "シンボルプロパティ"ダイアログの "ベースクラス"テキストボックスに指定するようです。問題は、自動生成されたサブクラスに、パラメータを持つコンストラクタがないことです。その代わりに、Flashはデフォルトのコンストラクタのみを使用して生成しようとしますが、これも失敗するのはMyClipにデフォルトのコンストラクタがないためです。

通常の方法でプロパティの初期化を延期することを除いて、これを回避する方法はありますか?

編集:私は十分明確ではありませんが、私はここで明確にしようとします。これはMyClipクラスの場合:

public class MyClip extends MovieClip 
{ 
    private var someValue : Number; 

    public function MyClip(someValue : Number) 
    { 
     this.someValue = someValue; 
    } 
} 

と私はライブラリ内のシンボルMyClipAための基本クラスとしてMyClipを指定し、私は理想的MyClipAクラスを自分で記述することなく、clip = new MyClipA(17);を行うことができるようにしたいと思います。

+0

ソリューションを見つけましたか? –

+0

実際にこれを行う方法はありません。これがあなたが直面している状況であれば、最善の方法は初期化を通常のメソッドに移すか、クラスを再構築することです(quooなど)。 –

答えて

1

MyClipAとMYClipBなどのクラスを作成する必要があると仮定しているのは、MyClipオブジェクトの動作だけを持つオブジェクトに別のアートを追加することです。

たぶん、あなたは、違っそれに近づくあなたのベースクラス作ることができる - あなたはそれあなたの例持っているようにMyClipを、芸術への参照そのうちの1つは2 aruguments、受け入れる:

public class MyClip extends MovieClip 
{ 
    public var art:ArtBaseClass 
    private var someValue : Number; 

    public function MyClip(someValue : Number, artClass:ArtBaseClass) 
    { 
     this.someValue = someValue; 
     this.art = new artClass(); 
     this.addChild(art); 
    } 
} 

をそして、あなたは何でも定義することができそうでなければ、これらのアートライブラリオブジェクトのそれぞれに適用されるArtBaseClassに必要です。

0

コンストラクタのデフォルトの引数を指定してください(nullはおそらく特別な値ですか?)。次に、コンストラクタの先頭にMovieClipの適切なデフォルトを設定するエラーチェックを追加します。それは本当にハックですが、私が知っている限り、ドラッグを使用してそれを行うより良い方法はありません&ドロップアニメーションのUI(あなたはコードを通じて行うことができます)。

+0

私は実際にそのパラメータを必要としない場合、それは動作します。基本的なコンストラクタをクラスに残し、オブジェクトが構築された後に初期化を行うための "初期化"メソッドを実装する必要があるでしょう。どちらがうまい?) –

0

この場合も同様です。これを解決する適切な方法は、MyClipから継承するMyClipAおよびMyClipBのクラスを作成することです。 MyClipに基づいたクラスがたくさんある場合、これは面倒なことがあります。そうであれば、とにかく継承の代わりにコンポジションを使用することを考え始めることもできます。

1

本当にできないと思います。 しかし、それができれば、それはプロトタイプと適切になるでしょう。おそらく、それぞれのデフォルトクラスのコンストラクタを変更することができます。

関連する問題