ActionScript3でプロっぽい書き方
2009.9.7 月曜日
ネット上で公開されているオープンソースとかのクラスライブラリって、中身を覗くとクラスや変数、定数がキレイに整理されていてプロだな、って感じると思います。というわけで、個人的にプロっぽいって感じる書き方を紹介。ポイントは .parent や .root を使って自分より上位のオブジェクトの関数や変数を操作しない、ってこと。
簡単な例を書くと、親(root)にA(A_mc)とB(B_mc)という子がいた場合、AがBに直接「動け!」と命令するのではなく、Aは親に話かけてってアピールし、親がAの話を聞いてBに命令する、というのが理想的な流れになります。
上の例をプログラムにすると以下のようになります。
自分で書いておきながら CustomEvent.as のsuperが何をしているのか正直サッパリ分かっていません。
//Main.as (root)
package {
import flash.display.MovieClip;
public class Main extends MovieClip {
public function Main():void {
A_mc.addEventListener(CustomEvent.MOVE_B, MoveB);
}
private function MoveB(e:CustomEvent):Event {
B.Move();
}
}
}
//A.as (A_mc)
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
public class A extends MovieClip {
public function A():void {
this.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
}
private function onMouseDown(e:MouseEvent):Event {
this.dispatchEvent(new CustomEvent("move_b"));
}
}
}
//B.as (B_mc)
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
public class B extends MovieClip {
public function B():void {
}
public function Move():void {
this.x ++;
}
}
}
//CustomEvent.as
package {
import flash.events.Event;
public class CustomEvent extends Event {
public static const MOVE_B:String = "move_b";
public function CustomEvent(_type:String):void {
super(_type, false, false);
}
public override function clone():Event {
return new CustomEvent(type);
}
}
}
Posted by tmdf|ActionScript