AS3の自動作成資産クラスのコンストラクタにパラメータを渡します
-
22-08-2019 - |
質問
私は、私はいくつかのライブラリアセットに使用すること(のはMyClip
それを呼びましょう)MovieClipのサブクラスを作成しています。私は、ActionScriptコードからこれらのムービークリップのインスタンスを作成することがあります。 MyClip
は、特定のプロパティの初期値を設定することを可能にするコンストラクタパラメータを有している。
、それを行うための論理的な方法は、「シンボルのプロパティ」ダイアログの「基本クラス」テキストボックスに指定しているようです。問題は、自動生成されたサブクラスがパラメータを持つコンストラクタを持っていないということです。代わりに、フラッシュがMyClip
は、デフォルトコンストラクタを持っていないためにも失敗しただけでデフォルトコンストラクタ、とそれらを生成しようとします。
この周りにどのような方法があり、離れて通常の方法にプロパティの初期化を延期から?
の編集を私は十分に明らかにされていないが、私はここで明確にしようとするでしょう。これはMyClip
クラスの場合:
public class MyClip extends MovieClip
{
private var someValue : Number;
public function MyClip(someValue : Number)
{
this.someValue = someValue;
}
}
と私はライブラリ内のシンボルのMyClipAのための基本クラスとしてMyClip
を指定し、私は理想的clip = new MyClipA(17);
クラスを自分で記述することなく、MyClipA
を行うことができるようにしたいと思います。
解決
私は、あなたが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に必要な任意の他定義することができます。
他のヒント
私はそれが本当に行うことができないと思います。 それを行うことができるなら、それは適切にプロトタイプとなります。おそらく、あなたは、デフォルトのクラスのそれぞれのコンストラクタを変更することができます。
(おそらく、特別な値としてnull
?)コンストラクタのデフォルト引数を指定してみてください。次に、あなたのMovieClipのための適切なデフォルト値を設定し、コンストラクタの先頭にエラーチェックのビットを追加します。それは本当にハックですが、私の知る限りでは(あなたがコードをそれを行うことができますのみ)ドラッグを使用してそれを行う&UIのアニメーションをドロップする良い方法はありません知っています。
も、このに走った場合。それを解決するための適切な方法は、MyClipから継承MyClipAとMyClipBのためのクラスを作成することです。 MyClipに基づいていたクラスが多い場合、これは面倒なことができます。その場合はその後、再び、あなたはとにかく代わりに相続の組成物を用いについて考え始めたいかもしれません。