スマートフォンやhtml5+CSS3など新技術に四苦八苦。jQuery、AjaxなどJavaScriptも難しいですね。そんなWebに悩む人のネタ帳です。

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を混在させるのはよくないでしょう。

このエントリーをはてなブックマークに追加

Pingback & Trackback

Comment

Comment Form

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

Monthly Archives

Search