FlashでドキュメントクラスをActionScript3で記述する場合に、Spriteを継承しているサンプルをよく見かけます。このSpriteはどういうものなのか、Movieclipとの違いは何なのか、知らずに使用していたので、少し調べてみました。
簡潔に言うと、SpriteはMovieclipからフレーム制御の機能を取り除いたものみたいです。つまり、構造的にはMovieclipはSpriteクラスを継承して、フレーム制御機能を追加しているわけですね。
例えば、Movieclipを継承するとcurrentFrame、gotoAndStop、stopなどの機能が使えるのに対して、Spriteではそれができないわけです。
一見して、Movieclipの方が多機能で良さそうな気がしますが、その分パフォーマンスが低下し負荷がかかりやすいため、Spriteを用いるほうが一般的なようです。
そこまでパフォーマンスに差があるの?世のPCの性能が向上すれば問題ないの?とも思いますが。
実際、フレーム制御を必要とせず、Spriteを継承してAS3でガチガチにアクションを埋め込めば何の問題もないのですが、要件によってはFlashのフレームで構築したい場合もあります。
そこで考えてみました。
AS3のソースは以下に展開します。
ドキュメントクラスではSpriteを継承しているので、メインステージのフレームは制御できません。しかし、Flash上で定義したMovieclip「mc_bg」のフレームの制御はできるんですね。
package { import flash.display.Sprite; import flash.events.MouseEvent; public class Main extends Sprite{ public function Main() { mc_btn_red.addEventListener(MouseEvent.CLICK, goRed) mc_btn_blue.addEventListener(MouseEvent.CLICK, goBlue) mc_btn_yellow.addEventListener(MouseEvent.CLICK, goYellow) } public function goRed(e:MouseEvent):void { mc_bg.gotoAndPlay("red"); } public function goBlue(e:MouseEvent):void { mc_bg.gotoAndPlay("blue"); } public function goYellow(e:MouseEvent):void { mc_bg.gotoAndPlay("yellow"); } } }
つまり、一般的なのに習い、Spriteを継承する。どうしてもタイムラインでモーションを制御したい場合には、部分的にMovieclipにまとめる。難しくはないですね。
ただ、混乱を避けるためにも、アニメーションを作成する場合には極力タイムラインとActionscriptを混在させるのはよくないでしょう。