duplicateMovieClipとplayと不具合。

FLASHの基本はムービークリップ。

なので、ムービークリップを使い倒すというのが正しいやり方のはずだ。
複製して、同じものをがんがん使いまくる…というのが、
正規の手法だと思うのだが、みごとなまでにハマったので、解決方法を。

1つのムービークリップを複製して、たくさん表示するのに、
duplicateMovieClipを使うことがある。


duplicateMovieClip("movie", "hoge", 1);

これで、movieという名前のムービークリップから、hogeという名前を複製することができる。
だが、このhoge、ほとんどのアクセスを受け付けないのだ。

例えば、

hoge.hp = 100;

などと、内部に定義した変数に値を入れることはもちろん、

hoge.myFunc();

という風に、関数をコールすることもできない。
それどころか、

hoge.gotoAndPlay(2);

という関数すら実行されない始末(しかもエラーもでない)。
1フレーム目でstop()で定義して、
複製した際に、パラメータに応じて、開始位置をずらす、というのは、
FLASHではごく当たり前の方法のはず。

なのに、duplicateしたムービークリップでは、それができない。

唯一できるのは、

hoge._x = 0;

など、元からあるプロパティをいじることのみ。
グーグル先生に聞いても答えは出ず、英語のGoogle先生に聞いたら、
同じことで悩んでいる人が多いことは分かった。

改めて、日本語で検索したところ、1件、すばらしい解決方法を提示しているところがあり、
その方法で、見事に目的が達せられたのだ。
なんとすばらしいことだろう。

で、その方法というのが。

元のムービークリップは、1フレーム目のstop()で停止している。
それを複製した、hogeから、
hoge.gotoAndPlay(2);
としただけでは、動作しない。
が、その元の2フレーム目に、

play();

こう書いておくだけでいいのだ。
なんということでしょう。

外部からplay()命令を出した上に、内部にもplay()命令というあわせ技ですよ!
実際に、この方法で動作したのを観て、本当に感動しましたね。

これで再生分岐はできるものの、パラメータの受け渡しはできない。
が、そこは、プロパティを利用すればいい。

_xや_yの使用は難しいかもしれないが、
_alphaや_scaleなどは、どうせ固定の値が入るわけだし、
受け渡しに使った後に、リセットしてやればいい。

最低1つでも渡せれば、movieからは_rootの関数が呼べるわけだし、
設定は楽にできるだろう。

久しぶりに、解決後にスッキリした不具合だった。
[PR]
by miries | 2012-07-12 02:21 | デジタル系


<< F-10Dを買ったのさ。 Android ADB のイン... >>