« フレームアクション | メイン | ボタンアクション »

ムービークリップアクション

ムービークリップアクションは、個々のムービークリップのインスタンスに設定するスクリプトです。ムービークリップアクションを設定したいインスタンスをステージで選択し、アクションウインドウを開いてスクリプトを書きます。
ムービークリップアクションは、インスタンスが表示されたら1行目から実行されるというものではなく、何かのイベントを受けて実行されるイベントハンドラの形式になっています。ムービークリップアクションに設定できるイベントハンドラには、onClipEventイベントハンドラとonイベントハンドラの2種類があります。

note:
ムービークリップアクションにonイベントハンドラを設定できるのはFlash MX(Flash Player 6)以降です。

■onClipEventイベントハンドラ
onClipEventイベントハンドラでは、()の中に応答するイベントの種類を書きます。

onClipEvent(イベント){
//実行するステートメントをここに書きます。
}

指定できるイベントには次の9種類があります。それぞれ別々のタイミングで実行されるので、1つのムービークリップアクションに複数のonClipEventイベントハンドラを書き込むことができますが、後述のonハンドラと違って1つのonClipEventイベントハンドラで複数のイベントを指定することはできません。


イベント    タイミング
load    インスタンスが登場した直後
unload    インスタンスが消えた直後
enterFrame    再生フレームが進んだ
mouseDown    マウスボタンが押された
mouseUp    マウスボタンが上がった
mouseMove    マウスカーソルが動いた
keyDown    キーが押された
keyUp    押されたキーが上がった
data    外部データを読み込み終わった

たとえば、onClipEvent(load)イベントハンドラは、そのインスタンスが登場した時に実行されます。変数の初期化やプロパティの初期設定、ムービークリップで使うメソッドや関数をfunction定義する場所として使います。
onClipEvent(enterFrame)イベントハンドラは、ムービークリップの再生フレームが進む度に実行されます。このとき、インスタンス自身が再生中であるかどうかが問題です。インスタンスが置いてある_root(入れ子の場合は1つ上の階層のムービークリップ)がstop()で停止中でも関係ありません。
onClipEvent(mouseDown)、onClipEvent(mouseUp)のイベントハンドラは、(左の)マウスボタンが下がったとき、上がったときのタイミングでそれぞれ実行されます。このとき、インスタンスがクリックされていなくても実行されるので注意が必要です。どのインスタンスがクリックされたかを知りたい場合には、マウス座標とインスタンスの領域をhitTest()を使って比較します。次のムービークリップアクションでは、インスタンス以外の場所をクリックしてもインスタンスのサイズが1.2倍に拡大します。

ムービークリップアクション:
//クリックイベントがあるとインスタンスを拡大する
onClipEvent (mouseDown) {
 this._xscale *= 1.2;
 this._yscale *= 1.2;
}

一方、次のスクリプトではクリックされた座標とインスタンスの領域のヒットテストを行っています。こうすればアクションが設定されているインスタンスをクリックしたときにそのインスタンスが拡大します。

ムービークリップアクション:
//クリックされたインスタンスだけを拡大する
onClipEvent (mouseDown) {
 if (this.hitTest(_root._xmouse, _root._ymouse, false)) {
  this._xscale *= 1.2;
  this._yscale *= 1.2;
 }
}

onClipEvent(keyDown)、onClipEvent(keyUp)のベントハンドラは、キーボードのキーが押されて下がったとき、上がったときのタイミングでそれぞれ実行されます。どのキーが押されたかはKey.isDown()やtheKeyCodeで調べることができます。

note:
onClipEventイベントハンドラの場合には、Keyオブジェクトのリスナーにしなくてもイベントを受け取ることができます。(リスナー→p.??)

■onイベントハンドラ
onイベントハンドラでも()の中に応答するイベントの種類を書きますが、onClipEventイベントハンドラと違って1つのハンドラで同時に複数のイベントを指定できます。

on(イベント1, イベント2, ...){
//実行するステートメントをここに書きます。
}


指定できるイベントには次の8種類のイベントがあります。イベントごとに個別のイベントハンドラを作ることができますが、内容が同じ場合には1つのハンドラに複数のイベントを同時に割り当てることもできます。


イベント    タイミング
dragOut   このインスタンスの上でマウスダウンしたままカーソルが外へ出て再び戻った。
dragOver  このインスタンスの上でマウスダウンしたままカーソルが外へ出た。
keyPress    キーが押された。
press    このインスタンスがクリックされた。(マウスダウン時)
release    このインスタンスがクリックされた。(マウスアップ時)
releaseOutside    このインスタンスがプレスされたままカーソルが外へ出てマウスアップした。
rollOver    このインスタンスの外へカーソルが出た。
rollOut    このインスタンスの中にカーソルが入った。

たとえば、on (press)、on(release)のイベントハンドラは、インスタンスが(左)クリックされた時、(左の)マウスボタンが下がったとき、上がったときのタイミングでそれぞれ実行されます。onClipEvent(mouseDown)イベントハンドラと違って、クリックされたインスタンスだけがイベントを受け取ります。on (releaseOutside)イベントハンドラは、次のようにon (release)イベントハンドラと組み合わせて使うと効果的です。

on (release, releaseOutside){
// クリックされた場合にマウスアップ時に実行したいスクリプトを書きます。
}

on (keyPress "キー")イベントハンドラは、指定したキーが押された時に実行されます。キーは"a"、"b"、"c"のように英数文字で指定します。returnキー、enterキーは""、Tabキーは""、←は""、→は""、↑は""、↓は""のように指定できます。

on (keyPress "キー"){
//指定のキーが押された時に実行したいスクリプトを書きます。
}

投稿者 oshige : 2005年2月13日 15:10