久しぶりに技術系ブログっぽいことを書きます。
AS3で、MovieClip.duplicateMovieClip()は廃止されました。
それでも、配置されているインスタンスを複製したいという需要は多くて、メニューリスト作ったりゲームで敵キャラ作ったりする時に、いちいちリンケージせずに、配置されたインスタンス名から複製したいってことは結構あると思います。
リンケージつけるの面倒くさいし、管理も面倒だし、同名を避けないといけないしね。
やりたいこと:Flashオーサリングで、タイムラインに配置した、リンケージしていないインスタンスを複製したい(AS2時代は、duplicateMovieClipでできた)
で、AS3でduplicateMovieClipっぽいことしたいなーと思って検索すると、KAYACの記事が引っかかって、constructorを使えばできるよーって書いてあるんですが、これがものすごい罠。
実際にやってみると出来上がるのは空のMCなんですよね。
どうもリンケージしたり、クラス定義されて、クラス名が明示的に決まっているMC以外は、MovieClip自体のクラスに参照が飛んじゃって、タダのnew MovieClip()と同じになっちゃうんですよ。
やっかいなのは、エラーも出さず、表示上も何も変化が無いので、AS2から移行してきた初心者が大量にここで引っかかって挫折してんじゃないかと・・・。
そういうわけで、はっきり明示しておきますが2010/10/26現在、AS3でduplicateMovieClipに相当する機能は存在しません。
KAYACの記事より、この記事がGoogleで上位になるのは難しそうですが。
結論:できない
ちなみに、constructorを使った複製ですが、リンケージされてれば可能とはいえ、xy座標とかコピーされずduplicateMovieClipとは程遠い挙動ですし、リンケージされてるクラスは、つまりリンケージ名で呼び出しが可能なんで、普通にnewすればいいですし、で、役に立つ機会はあまり無いんじゃないかと思います。
描画情報をそのままコピーすることが出来ればオリジナルclone作れるんですけどね。
あれ?そういえばびんた先生がswfを解析してベクターデータ抜き出すとか、やってたような・・・。
![]() |
81,517 views
|
![]() |
73,483 views
|
![]() |
58,595 views
|
![]() |
64,084 views
|
![]() |
151,810 views
|