カテゴリー
未分類

attachMovieにおけるClassコンストラクタへの初期Propertyの引渡し

flash,attachMovie,Class

thFlash.gifってやっぱ無理なんですかね?これ多分AS1の時にも似たようなことをやろうとしてできなくて、結局監視して対応したような気がする。この辺AS2でできるようになったのかな?ということで再度挑戦。
一応Docには

The properties specified with initObject are available to the constructor function.

と記述してあるのだけど、のconstractorだとちとうまく動作しない。
たとえば

みたいなのをMovieClip Objectにregistして

みたいにしたとすると。”undefined”になる。ただまぁMCの1フレに”trace(file);”ってすればキチンと”1.jpg”って表示されます。Classのconstractorは引渡しの前に了しているみたい。constractor関数に何かしらの引数とかで取得できたりするもんなんですかね?まぁフレームに記述すればよいだけなんですけど、できるならClassにまとめたいw
要望度強そうな感じの動作だと思うのですが、根本的なところでなにか見落としているのだろうか???

「attachMovieにおけるClassコンストラクタへの初期Propertyの引渡し」への13件の返信

僕の場合は、以下のアプローチを参考にしてます。
http://faces.bascule.co.jp/moocklec/slide05.html
attachMovie != new 演算子と考えれば納得かも?よくわからないですけど(汗)。コンストラクタの中にattachMovieを仕込んでnewを使って配置するのも手かもしれないですね。引数に深度を必ず設定しなきゃですが、ver7だったら getNextHighestDepthを使えば、引数に深度入れなくても行けるかもしれないです。わかんないですけど。

mx2004使ったことないんで分からないですけど、mx(as1.0)の時は+39さんのやり方で正解だと思います。initObjectはコンストラクタにアクセスしますってヘルプに書いてありました。

あー確かに、newで作ってしまってそれに引数渡して、その中でattachってのはありですな。しかしinitObjって結局今まで一度も使ってないなあw(っつーかmoockは使うなっていうてますなw)
初期化はとりあえずconstractorにまとめておけちゅうことですなー。ちょっくら試してみます。ありがとございます。

何か腑に落ちないので生まれて初めてinitObj使って見ました。で、わかりました。クラスの中できちんとプロパティ変数を宣言すればinitObjで引数渡せます。
dynamic class MC extends MovieClip{
var file:String;//これ重要
function MC(){
trace(file);
}
}
でもinitObjは好きくないのでこれからも使わないです。:-)

>shichizaさん
as1の場合もちょっと試してみたんですが、classのconstractorにはどーもアクセスしてないっぽいんですよね・・・。
なんかやり方ミスってるのかな?むう・・。
今日はこれから一日打ち合わせなので帰宅してから色々検証してみます。

dynamicにしているから大丈夫かと思っていた。
ということでできました。
ふむ・・なんのためのdynamic宣言だ?とか思いつつも
ありがとございますーー。
さすがです!

はじめまして。
僕も、2004からこの点期待していたのに、
結局、mcのコンストラクタは、オーバーロードできなく
使いずらいですね。
僕もinitObjきらいですが、
状況いにょっては、しょうがなく使っています。
使わないと、記述が長くなりませんか。
みなさんは、使わないでどうやって、解決しているのでしょう?汗

>yassさん
>mcのコンストラクタは、オーバーロードできなく
これのオーバーロードってどういう意味なのか良くわかっていなかったりするのですが、VBのドキュメントとかには

オーバーロードとは、異なる型の引数を持つ同じ名前のプロシージャ、インスタンス コンストラクタ、またはプロパティをクラスに複数作成することです。

ということは同じ名前のclassとmovie clip objectを共存させるってことですかね?
>僕もinitObjきらいですが、
initObjを使わない方法を模索してみたのだけど、どうしてもmoockが言うような「プロパティの初期化の責任が、インスタンス生成メカニズムに移る。 プロパティはコンストラクタで初期化されるべきである 」をinitObjを使わずに実装する方法が思いつかない(汗

>>+39さんへ
オーバーロードとは、『コンストラクター関数』を複数用意する事ではないかと思います。
//java言語———————————————
public class Human{
String name;
int age;
String sex;
Test(String name,int age){
name = name;
age = age;
}
Test(String name,int age,String sex){
name = name;
age = age;
sex = sex;
}
public static void main(String[] args){
Human test = new Human(“shichiza”,26);
//Human test = new Human(“shichiza”,26,”man”);
}
}
//———————————————
要するに、new演算子をつかってインスタンス(オブジェクト)を生成する時、クラスに渡すパラメータの数によってコンストラクター関数が自動的に適切なものが選ばれるってのが『オーバーロード』の実装ではないかと。最近、javaを覚えたてたての赤ん坊ですが、、、、。
よく似た言葉で『オーバーライド』ってありますが、それとよく混同する人がいますけど。自分も、さっそくas2.0に挑戦してみようかと思います。

訂正です。
上記のjavaのコンストラクター部分、が2つある所なんですが
以下にようにしてください。
Human(String name,int age){
name = name;
age = age;
}
Human(String name,int age,String sex){
name = name;
age = age;
sex = sex;
}
ふと思ったのですが、muroicciさんの
//
dynamic class MC extends MovieClip{
var file:String;//これ重要
function MC(){
trace(file);
}
}
//
ですが、これができるってことは逆に考えて
intObjは、コンストタクター関数の前に渡されていることになりますよね?

>ですが、これができるってことは逆に考えて
>intObjは、コンストタクター関数の前に渡されていることになりますよね?
ですです、だからマクロメディアのドキュメントは正しかったということで一応問題は解決です。ただみんなinitObjが嫌いっていうので・・・w
intObjで引き渡している”file”をintObjを使わず引き渡す場合、オレが考えるとどうしてもMCインスタンス生成のためのClassをつくりその中でattachそして”file”の継承みたいなことしか考え付かないのですが、それ以外にどーいう方法があるのかしら?と
なんかブリッジにブリッジを重ねて逆に冗長になる方法しか思いつかなかったりします。オレはアホだーー。

質問してから思ったのが、
attach後、initメソッドを呼び出すのは、
よく使いますね。moockが言ってた。
init(“01.jpg”);
ってことです。でも、コンストラクタで、
初期化したいのが、希望ですけど。
>>ブリッジに、、、
oopのデザインパターンには、
実際,bridge patternが存在します。
実装と機能を、bridgeする方法ですが、
as2にも、いろいろと、参考にできるので、
面白いですよ。

なんかattachしてすぐ後にinitとか少し悲しいんですけど、仕方ないですか?w
>実際,bridge patternが存在します。
そーなんですかー。むー、キチンとOOPとか本を読むべきかーー。
FlashのHelpだけじゃあ最近限界を感じつつありますw

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です