
前回のエントリー「外部クラスを作る(ActionScript2.0)」をActionScript3.0版にした場合、以下のように置き換えられます。
package{
class SampleClick {
var base;
function SampleClick(mc:MovieClip){
basemc = mc;
init;
}
function init():void{
setBtn();
}
function setBtn():void{
base.b_mc.addEventListener(MouseEvent.CLICK, onClickHandler);
}
function onClickHandler(event:MouseEvent):void{
trace("クリック!"); //出力:クリック!
trace(event.currentTarget); //出力:b_mc
helloWorld();
}
function helloWorld():void{
trace("helloWorld!"); //出力:helloWorld!
}
}
}
まずpackageで全体を囲うようになるという事が一点。
onReleaseの代わりにイベントリスナーを使うという事が一点。
イベントリスナーで指定する関数(ハンドラ)内ではスコープはクラス内での空間になるということが一点。このことはつまり、AS2のonReleaseの時とはスコープの扱いがかわってくるということなので注意。その証拠に、AS2の時に使う「var scope = this」なんていう文が不要になっています。
その代わりにインスタンス内部でのスコープで指定したい時は、event.currentTargetを指定すると、イベントの対象、つまりインスタンスを指定する事になるので、例えばインスタンスの位置をx = 50にしたいなんて時は、ハンドラ内でevent.currentTarget.x = 50;という風にしてやればOKです。
#ちなみにこれらは一切テストしてませんので一応そういうことでお願いします。。。(Flash CS3体験版の期限が切れてしまったのです、いい加減買わないと)

