Action Script マウス移動によるムービーの操作
サンプル

ActionScriptでは_xmouse(カーソル横座標)、_ymouse(カーソル縦座標)というプロパティが用意されています。
これを利用してMovie上でカスタムマウスポインタやマウスポインタを追いかけるアクセサリ等が作れます。

マウスの移動を停止してもMovieClipオブジェクトは少し動いていて欲しいのでイベントは「mouseMove」ではなく「enterFrame」にします。

onClipEvent (enterFrame) {
_x += _xmouse/5;
_y += _ymouse/5;
}


動作説明
onClipEvent (enterFrame) はこのMovieClipオブジェクトが表示されている限りハンドラ内のScriptを実行します。
_x += _xmouse/5はMovieClipオブジェクトの横座標(_x)をカーソルの横座標(_xmouse)と同じになるまで_xmouse÷5ずつ移動させます。
_y += _xmouse/5はMovieClipオブジェクトの縦座標(_y)をカーソルの縦座標(_ymouse)と同じになるまで_ymouse÷5ずつ移動させます。

この場合のイベントはマウスの移動を停止した場合でもMovieClipオブジェクトの座標をマウスポインタの座標まで移動させる、つまりScriptを実行する必要がありますのでイベントは「enterFrame」にします。



応用例 移動方向でMCを切り替える

サンプル

UFOをゴキブリに変えて右に移動するときは右向き、左に移動するときは左向きに切り替える方法の1例です。
ゴキブリが歩くMCを作りそれをまたMCにして2フレにもコピーし、2フレのゴキブリは向きを変えます。(1フレ及び2フレにはstop()を設定)

この例では左右の変化のみを調べていますから、ルート上のマウス横座標からゴキブリの横座標を引いた値の正負によってゴキブリの向きを切り替えます。赤字のスクリプトが追加された部分です。

onClipEvent (enterFrame) {

_x += _xmouse/5;
_y += _ymouse/5;

direX = _root._xmouse - _x;
if (direX<0) {
this.gotoAndStop(1);
} else {
this.gotoAndStop(2);
}


}


動作説明
_x += _xmouse/5はMovieClipオブジェクトの横座標(_x)をカーソルの横座標(_xmouse)と同じになるまで_xmouse÷5ずつ移動させます。
_y += _xmouse/5はMovieClipオブジェクトの縦座標(_y)をカーソルの縦座標(_ymouse)と同じになるまで_ymouse÷5ずつ移動させます。
direX = _root._xmouse - _x ルート上のマウス横座標からゴキブリの横座標を引いた値を変数direXに代入しておきます。
if (direX<0) { もしゴキブリよりマウスが左ならdireXはマイナス、つまり0より小さいので・・・
this.gotoAndStop(1)このMCの1フレに移動、つまり左向きのゴキブリに切り替える。
} else { もしdireXがマイナス以外つまり右に移動させるなら・・・
this.gotoAndStop(2)このMCの2フレに移動、つまり右向きのゴキブリに切り替える。



応用例 移動方向でMCの角度を変える

サンプル

前例では左右の画像に切り替えていましたが別の方法として、マウスの座標値から角度を求めてMCの向きを変えています。
前例のゴキブリが歩くMCには「角度のスクリプト」を記述します。それをMCにして「移動のスクリプト」を記述します。

//角度のスクリプト
onClipEvent (enterFrame) {
xCal = _parent._xmouse-_x;
yCal = _parent._ymouse-_y;
Radian = Math.atan2(yCal, xCal);
Degree = Radian/(Math.PI/180);
_rotation = Degree;
}


//移動のスクリプト
onClipEvent (enterFrame) {
_x += _xmouse/5;
_y += _ymouse/5;
}


動作説明
xCal = _parent._xmouse-_x MCからマウスポインタ座標までの水平距離の差を変数に代入。
yCal = _parent._ymouse-_y MCからマウスポインタ座標までの垂直距離の差を変数に代入。
Radian = Math.atan2(yCal, xCal) x、y 座標値から角度を求め変数に代入。
Degree = Radian/(Math.PI/180) それを度数に変換して変数に代入。
_rotation = Degree MCの角度(向き)を変更。

_x += _xmouse/5はMovieClipオブジェクトの横座標(_x)をカーソルの横座標(_xmouse)と同じになるまで_xmouse÷5ずつ移動させます。
_y += _xmouse/5はMovieClipオブジェクトの縦座標(_y)をカーソルの縦座標(_ymouse)と同じになるまで_ymouse÷5ずつ移動させます。



応用例 マウス移動によるマスクの移動

サンプル

基本的には「マウス移動によるムービーの操作 」と同じことをやっていますがそれらをマスクで行うと、おもしろい効果が表現できます。

カスタムマウスポインタ

今のScriptを少し変えてカスタムマウスポインタにしてみます。

onClipEvent (enterFrame) {
Mouse.hide();
_x += _xmouse;
_y += _ymouse;
}




startDrag ()を使ったカスタムマウスポインタ

サンプル

カーソル座標を使わずにMovieClipオブジェクトのメソッドであるstartDrag ()でもできます。

onClipEvent (load) {
Mouse.hide();
this.startDrag(true);
}


動作説明
 この場合のイベント「load」はMovieClipオブジェクトが初めて表示されたときに、ハンドラ内のスクリプトを実行します。つまり最初の1度だけ実行します。
Mouse.hide()はカーソル表示のプロパティでマウスポインタを非表示にします。
startDrag ()はそのMovieClipオブジェクトをドラッグ可能にしますが、この例ではstartDrag()メソッドを「ドラッグ」としてではなく、単にMovieClipオブジェクトをマウスポインタに吸着させるために使用しています。



(c)2004 Tsuruji Studio
Click here to visit our sponsor