feb19.jp

Nobuhiro Takahashi
Designer / Engineer

AS3.0に対応するために覚えなければならない事

AS3.0に対応するために覚えなければならない事

FlashCS3とActionScript3.0の登場によって、AS1やAS2で作業していた我々Flashオーサーにとって大きな変化が求められています。いくつか個人的にメモをしたのでそれを貼り付けておきます。

まず、AS3からはonReleaseやon(rollOver)などが使えなくなります。今後、マウスやキーボードなどの動作によるアクションを起こすときはイベントリスナーを使います。続きではその置換方法を解説します。

また、onReleaseだけでなく、onEnterFrameやsetInterval、loadMovie、getURLの置換方法も合わせて掲載しておりますので参考にしてみてください。

onReleaseやon(RollOver)の置換方法

■ 解説

下の例は、my_btnというMCまたはボタンがステージ上に配置されているとして、my_btnにマウスオーバーまたはクリックしたときトレース文が表示されるというサンプルです。

my_btnに.addEventListener()でリスナーを関連付けて「クリックされたとき」つまり「AS2まではonReleaseの時」は「MouseEvent.CLICK」、「マウスオーバーされたとき」つまり「on(release)だった時」は「MouseEvent.MOUSE_OVER」で対応するfunctionを呼び出しています。

なおfunctionには引数としてMouseEventオブジェクトを指定するのをお忘れなく。

■ ソース例

my_btn.addEventListener(MouseEvent.CLICK, click_hundler);
my_btn.addEventListener(MouseEvent.MOUSE_OVER, mouseover_hundler);
function mouseover_hundler(evt:MouseEvent):void {
	trace("mouseOver!");
};
function click_hundler(evt:MouseEvent):void {
	trace("mouseClick!");
}

onEnterFrameの置換方法

■ 解説

onReleaseだけでなく、イベントハンドラ全部が使えなくなるため、onEnterFrameなどもつかえなくなります。addEventListenerで第一引数にEvent.ENTER_FRAMEまたは"enterFrame"と入力し、第二引数に実行する関数を指定し、関数の引数にEventオブジェクトを指定すればOKです。

また、この例ではiの値が100を超えるとEnterFrameイベントが停止します。removeEventListenerでイベントを削除していますので参考にしてみてください。

■ ソース例

var i:int = 0;
my_tf.addEventListener(Event.ENTER_FRAME, enterFrame_handler);
//または
//my_tf.addEventListener("enterFrame", enterFrame_handler);
function enterFrame_handler(evt:Event):void {
	i++;
	my_tf.text = ""+i;
	if (i>100) {
		my_tf.removeEventListener(Event.ENTER_FRAME, this);
	}
}

setIntervalの置換方法

■ 解説

下の例はmy_tfというダイナミックテキストフィールドに入っている数字がどんどん増えていくというサンプルです。

まずvar timer:Timer = new Timer(100,0);というコンストラクタでタイマーを作成します。
Timerの引数(「100,0」の部分)は、第一引数が「何ミリ秒間隔でイベントを起こすか」。第二引数が「何回イベントを起こすか」。とりあえず無制限に起こしたい今回のようなonEnterFrameの場合は0(無制限)と指定します。

次にtimerに.addEventListener()でリスナーを関連付けて「タイマーのイベントがおきたとき」つまり「TimerEvent.TIMER」を第一引数に、第二引数にそのときおこすfunctionを指定します。
functionでTimerEventオブジェクトを引数を指定し、イベント内容(処理内容)を記述します。

最後に作成したtimerをstart()メソッドで作動させてやれば、onEnterFrameと同様の処理が行えます。

■ ソース例

var i:int = 0;
var timer:Timer = new Timer(100, 0);
timer.addEventListener(TimerEvent.TIMER,onTick);
function onTick (evt:TimerEvent):void {
  i++;
  my_tf.text = ""+i;
}
timer.start();

getURL()やloadMovie()の置換方法

getURL()やloadMovie()やLoadVarsクラスも使えなくなりました。import flash.net.*;などでURLRequestクラスやnavigateToURLメソッドを呼び出す必要があります。

■ 解説

例はステージ上に置かれたmy_btnをクリックすると本ブログにジャンプするという、簡単なリンクボタンのサンプルです。

まず呼び出すURLをURLRequestコンストラクタで生成します。生成されたURLRequestインスタンスはきちんとURLRequestで型指定してあげてください。

それをMouseEvent.CLICKのfunction内にて、navigateToURL()メソッドで第一引数にさきほど生成したURLRequestインスタンスを、第二引数に"_blank"や"_self"、"_top"などを記述すると、リンクボタンが生成されます。

■ ソース例

import flash.net.URLRequest;
import flash.net.navigateToURL;
var my_url:URLRequest = new URLRequest("http://feb19.jp/as3/");
my_btn.addEventListener(MouseEvent.CLICK,gourl);
function gourl(evt:MouseEvent):void {
	navigateToURL(my_url, "_blank");
}

などなど。。
たまに同じようなエントリーを追加していきます。

Navigation

prev: FuseKitを使う
next: Twitter入門

Recently Entries