- 2007年11月 9日 17:16
- ActionScript 3.0
ActionScript3.0で開発を始めて1ヶ月
少しずつ開発に慣れてきました。
というかAS3がことのほか気持ちよくて
もうAS2には戻れないかも・・・
なにが気持ちよいかというと
AS2ではなんだかんだで面倒だったEvent関連の実装が
非常に整理されてわかりやすくなったことがあります。
(覚えるまではわかりにくかったけど)
というわけで今回のメモは
Eventクラスまわりのお話です。
少しずつ開発に慣れてきました。
というかAS3がことのほか気持ちよくて
もうAS2には戻れないかも・・・
なにが気持ちよいかというと
AS2ではなんだかんだで面倒だったEvent関連の実装が
非常に整理されてわかりやすくなったことがあります。
(覚えるまではわかりにくかったけど)
というわけで今回のメモは
Eventクラスまわりのお話です。
とりあえず、Eventってなんやねんというか
何から説明したら良いかちょっと悩んだのですが
皆にとって(たぶん)なじみの深い onEnterFrame を選びました。
AS2では、MovieClipクラスの中に onEnterFrame という関数がすでにあり
そいつをオーバーライドする事で実装が可能でした。
簡単に言えば、onEnterFrame()を作れば、フレーム毎の挙動を定義できました。
例えば、毎フレーム x 方向に1px動く MoiveClip クラスを作る場合は
// MovieClipを継承したクラスを定義する.
class MyMovieClip extends MovieClip{
// コンストラクタ
public function MyMovieClip(){}
// onEnterFrame を定義
public function onEnterFrame():void{
// 毎フレーム 1px ずつ x 方向に移動する.
this._x++;
}
}
また、後から実装する場合は
// mcというMovieClipがあったとして.
mc.onEnterFrame = function(){
// 毎フレーム 1px ずつ x 方向に移動する.
this._x++;
}
とか書きましたが、AS3からは以下のようになりました。毎フレーム x 方向に1px動く MoiveClip クラスを作る場合は
package{
// 継承するので,importが必要
import flash.display.MovieClip;
// このクラス内で使うEventのクラスを import
import flash.event.Event
// MovieClipを継承したクラスを定義する.
class MyMovieClip extends MovieClip{
// コンストラクタ
public function MyMovieClip(){
// addEventListenerでイベントハンドラを追加する.
// 引数は イベントの種類, イベント発生時に実行される関数
addEventListener( Event.ENTER_FRAME, onEnterFrameHandler );
}
// EnterFrame イベントのハンドラを定義
public function onEnterFrameHandler( event:Event ):void{
// 毎フレーム 1px ずつ x 方向に移動する.
this._x++;
}
}
}
後から実装する場合には
// mcというMovieClipがあったとして.
mc.addEventListener( Event.ENTER_FRAME, onEnterFrameHandler );
function onEnterFrameHandler( event:Event ){
// 毎フレーム 1px ずつ x 方向に移動する.
mc._x++;
}
と書くようになります。ハンドラ側の引数に ( event:Event ) というのがありますが
これは、このハンドラがイベントによって呼ばれた際に、
そのイベントの内容が引数として渡されます。 この渡されたイベントは、その種類によって色々な値を取れたりします。
例えば、MouseEvent.WHEEL というイベントのハンドラを指定した場合
event.delta でそのマウスホイールの回転をとる事ができます。
この特性を利用して、オリジナルのEventクラスを作って色々出来たりします。
めんどくせーよ、やってられるか!と思った人
僕も最初はそうでしたが、慣れれば気持ちいいんですよこれが・・・
それに、複雑な実装になるほど有難くなってきます。
それに、この仕様だとこういう事もできます。
// mcというMovieClipがあったとして. mc.addEventListener( Event.ENTER_FRAME, func1 ); mc.addEventListener( Event.ENTER_FRAME, func2 ); mc.addEventListener( Event.ENTER_FRAME, func3 ); mc.addEventListener( Event.ENTER_FRAME, func4 ); // ...延々と続くつまり、ひとつのイベントに対して、処理を後から好き勝手に足せるんです。
これをas2でやろうとしたら結構面倒じゃないですかね?
次回は、先ほども述べたオリジナルのEventクラスを定義して
それを使う方法を書いてみようかと
ではでは。
- Newer: ページを分割するプラグイン:PageBute
- Older: ActionScript 3.0 メモ