FlashにはButtonクラスというものが既に用意されていますが、僕は滅多にしか使いません。自作した方が拡張性が高いからです。拡張性とは、onRollOver,onPressといったイベントハンドラを自分で記述することで色々なことが可能になるということです。ここでは例として次のような動作をする自作ボタンクラスを作成してみることにします。
・コンストラクタで文字列を受け取り、マウスによるインタラクション、onRollOver,onRollOut,onPress,onRelease,onReleaseOutsideを実装する。
・onRollOverでアンダーラインを表示
・onReleaseで、ルートの関数(ここでは例として「ButtonOnRelease」;名前は任意)を実行
では、以下にコードを示します。コードの下には各行を一つずつ追った解説があります。
class MyButton{
private var mc:MovieClip;
private var oTft:TextFormat;
function MyButton(strCaption:String){
this.mc = _root.createEmptyMovieClip('mcButton',_root.getNextHighestDepth());
delete this.mc.onEnterFrame;
this.mc.createTextField('tf',this.mc.getNextHighestDepth(),0,0,0,0);
this.mc.tf.autoSize = true;
this.mc.tf.text = strCaption;
var owner:Object = this;
this.mc.onRollOver = function(){
owner.SetUnderline(true);
owner.SetPosition(-1,-1);
}
this.mc.onRollOut = function(){
owner.SetUnderline(false);
owner.SetPosition(0,0);
}
this.mc.onReleaseOutside = this.mc.onRollOut;
this.mc.onPress = function(){owner.SetPosition(1,1);}
this.mc.onRelease = function(){
owner.SetPosition(-1,-1);
_root.ButtonOnRelease();
}
}
private function SetPosition(nX:Number,nY:Number):Void{
this.mc.tf._x = nX;
this.mc.tf._y = nY;
}
private function SetUnderline(fActive:Boolean):Void{
if(!this.oTft)this.oTft = new TextFormat();
this.oTft.underline = fActive;
this.mc.tf.setTextFormat(this.oTft);
}
}