今回はイベント処理について。
これはアクションスクリプト1.0&2.0からめちゃくちゃ変わってしまって、
おまけにめちゃややこしく感じます!!(私だけ?!)
まず、アクションスクリプトにおける、イベントってなんだっけ?というと、
■マウスの操作
→マウスをクリックしたら...
→マウスをマウスでインスタンスをロールオーバーしたら...
とかいう、マウスの操作に関するイベント。
■キーボードの操作
→ENTERキーが押されたら...
→矢印キー右が押されたら...
という、キーボードに関するイベント。
例として、私のHP、isvalid
の、アクションスクリプト入門編、変数01 ページ真ん中あたりにある
「画面をクリックするとひよこが前に(右に)進むアクションをアクションスクリプトを使って作る」という例をみると、
http://isvalid.jp/actionscriptLab/ASlesson/actionscript_variable01.html
アクションスクリプト1.0&2.0では、ムービークリップに直接スクリプトを書けたので、
対象となるムービークリップをクリックして選択(HPの例ではヒヨコ)、
下記コードを「アクションームービークリップ」に書くという方法でした。
onClipEvent(mouseDown) {
step = 45;
_x = _x + step;
}
で、3.0では上記と同じ感じでいくと、
下記スクリプトを、ムービークリップ内のフレームに記述。
stage.addEventListener(MouseEvent.CLICK, stepRight);
function stepRight(event:MouseEvent):void{
var step:int = 45;
x = x + step;
}
まず決定的に違うのは、onClipEvent()というイベントハンドラは使えない!!
微妙に注意が、オブジェクトのx座標(例でいうとヒヨコのx座標)の表し方が、
_x から x に変わってます。
そして、絶対しなくてはいけないのが、イベントリスナーを登録という作業。
これがなんだかややこしい感じがするのですが、この作業をタイトルにある、
addEventListener()を使って行います。
addEventListener()には引数が5つあるんですが、絶対必要なのが、一つ目と二つ目。
addEventListener(イベントの型, リスナー関数)
イベントの型というのが、上記スクリプトでいうと、MouseEvent.CLICK の部分。
マウスをクリックしたときに~する、 という部分。
リスナー関数ってのが、stepRight。
自分で名前をつけた関数を入れます。今回は右に進むということで、stepRightとしてみました。
つまり、
addEventListener(MouseEvent.CLICK, stepRight);
ということです。
次に、addEventListener()の前についてる stage ですが、
これは、ムービーのステージを指してます。
今の例では、ムービークリップ内のタイムラインに記述してるので、
stage.addEventListener()
とすると、ムービーのどこをクリックしても stepRight が実行。
this.addEventListener() または addEventListener()
だと、ムービークリップ(例の場合ヒヨコ)をクリックすると stepRight が実行。
(ヒヨコ以外の場所をクリックしても stepRight は実行されません)
ココがわかれば、あとは自分で名前を決めた stepRight という関数を定義してやればよいわけです。
関数がよくわからない人は
ActionScript3.0 のお勉強 - function 関数 - を見てみてください。
http://ameblo.jp/isvalid/entry-10128767366.html
うーん、ややこしい。。。。。
ちなみに、コレをメインタイムラインに記述したとすると、ヒヨコのムービークリップをhiyokoとつけたとして、
■ムービーのどこをクリックしてもヒヨコが動くバージョン
this.stage.addEventListener(MouseEvent.CLICK, stepRight);
function stepRight(event:MouseEvent):void{
var step:int = 45;
hiyoko.x = hiyoko.x + step;
}
■ヒヨコををクリックでヒヨコが動くバージョン
hiyoko.addEventListener(MouseEvent.CLICK, stepRight);
function stepRight(event:MouseEvent):void{
var step:int = 45;
hiyoko.x = hiyoko.x + step;
}
と、なります。あぁ疲れた~
ActionScript 3.0プログラミング入門
を読みつつ、3.0のお勉強をしています