マウスの操作について
・ | マウスカーソルの座標を取得する |
・ | 自作のマウスカーソルを作成する |
・ | 自作のマウスカーソルをゆっくり近づける |
・ | 自作のマウスカーソルを動かした方向に向ける |
・ | インスタンスをドラッグする |
・ | インスタンスをドロップする |
・ | マウスホイールの回転を取得する(Flash 7 以降) |
マウスカーソルの座標を取得する
■マウスカーソルの座標を調べる
マウスカーソルの座標を調べるには、以下のムービークリップのプロパティを使用します。
x 座標の値を取得 _xmouse
y 座標の値を取得 _ymouse
■「グローバル座標系」のマウスカーソルの座標を調べる
_root から取得した場合、グローバル座標系を基点とした、マウスカーソルの座標を取得できます。
例) マウスカーソルの座標を取得する
// 毎フレーム実行されるイベント
onClipEvent (enterFrame) {
// マウスカーソルの座標を取得
var x = _root._xmouse;
var y = _root._ymouse;
trace("x座標:" + x + " y座標:" + y);
}
例) マウスカーソルの座標を取得する(Flash 6 以降)
// 毎フレーム実行されるイベント
_root.onEnterFrame = function (){
// マウスカーソルの座標を取得
var x = _root._xmouse;
var y = _root._ymouse;
trace("x座標:" + x + " y座標:" + y);
};
■「任意のローカル座標系」のマウスカーソルの座標を調べる
任意のムービークリップから取得した場合、「任意のムービークリップのローカル座標系」を基点とした、マウスカーソルの座標が取得できます。
例) 「任意のムービークリップ」の「ローカル座標系」を基点とするマウスカーソルの座標を取得する
// 初回に一度だけ実行されるイベント
onClipEvent (load) {
// テスト用に適当に姿勢を変更
_x = 0;
_y = 0;
_rotation = 15;
_xscale = 50;
_yscale = 50;
}
// 毎フレーム実行されるイベント
onClipEvent (enterFrame) {
// マウスカーソルの座標を取得
var x = this._xmouse;
var y = this._ymouse;
trace("x座標:" + x + " y座標:" + y);
}
例) 「ムービークリップ mc のローカル座標系」を基点とするマウスカーソルの座標を取得する(Flash 6 以降)
// 初期化処理(テスト用に適当に姿勢を変更)
mc._x = 0;
mc._y = 0;
mc._rotation = 15;
mc._xscale = 50;
mc._yscale = 50;
// 毎フレーム実行されるイベント
mc.onEnterFrame = function () {
// マウスカーソルの座標を取得
var x = this._xmouse;
var y = this._ymouse;
trace("x座標:" + x + " y座標:" + y);
};
自作のマウスカーソルを作成する
■マウスカーソルを作成する
マウスカーソルに、好きなイラストを使用してみます。
1.マウスカーソル用の素材を用意する
マウスカーソル用の素材を用意して、ムービークリップを作成します。
2.「マウスカーソル用のムービークリップ」にスクリプトを追加する
「マウスカーソル用のムービークリップ」に、以下のスクリプトを記述します。
マウスを動かすたびに、マウスカーソルの座標が、ムービークリップの座標にセットされるようになります。
例) 「マウスカーソルの座標」を「ムービークリップの座標」にセットする
// マウスカーソルを移動するたびに実行されるイベント
onClipEvent (mouseMove) {
// マウスカーソルの座標をムービークリップの座標にセット
_x = _root._xmouse;
_y = _root._ymouse;
}
例) 「マウスカーソルの座標」を「ムービークリップ mc の座標」にセットする(Flash 6 以降
// マウスカーソルを移動するたびに実行されるイベント
mc.onMouseMove = function (){
// マウスカーソルの座標をムービークリップの座標にセット
this._x = _root._xmouse;
this._y = _root._ymouse;
};
3. OS のマウスカーソルを非表示に設定
次に、OS のマウスカーソルを非表示にします。
Mouse.hide() を呼び出すと、Flashプレイヤー上のマウスカーソルが非表示になります。
一度でも実行すれば効果は持続します。
例) マウスカーソルを非表示
// OS のマウスカーソルを非表示に設定
Mouse.hide();
元に戻すには、Mouse.show() を呼び出します。
例) マウスカーソルを可視表示
// OS のマウスカーソルを可視表示に設定
Mouse.show();
4.マウスカーソルをスムーズに移動させる
最後に、Flash のフレームレートが低いときでも、マウスカーソルがスムーズに動くようにします。
マウスカーソル移動のイベント中に、 updateAfterEvent() 関数を呼び出します。
updateAfterEvent() 関数を実行すると、Flash のフレームレートに関係なく、再描画する事ができます。
例) マウスカーソルを移動するたびに再描画する
// 初回に一度だけ実行されるイベント
onClipEvent (load) {
// OS のマウスカーソルを非表示に設定
Mouse.hide();
}
// マウスカーソルを移動するたびに実行されるイベント
onClipEvent (mouseMove) {
// マウスカーソルの座標をムービークリップの座標にセット
_x = _root._xmouse;
_y = _root._ymouse;
// マウスが動くたびに再描画する
updateAfterEvent();
}
例) マウスカーソルを移動するたびに再描画する (Flash 6 以降)
// OS のマウスカーソルを非表示に設定
Mouse.hide();
// マウスカーソルを移動するたびに実行されるイベント
mc.onMouseMove = function (){
// マウスカーソルの座標をムービークリップの座標にセット
this._x = _root._xmouse;
this._y = _root._ymouse;
// マウスが動くたびに再描画する
updateAfterEvent();
};
自作のマウスカーソルをゆっくり近づける
■マウスカーソルを作成する
マウスカーソルの座標に、ゆっくり近づくようなマウスカーソルを作成してみます。
1.マウスカーソル用の素材を用意する
マウスカーソル用の素材を用意して、ムービークリップを作成します。
2.「マウスカーソル用のムービークリップ」にスクリプトを追加する
「マウスカーソル用のムービークリップ」に、以下のスクリプトを記述します。
変数 friction は、摩擦係数です。この変数の値を変更すると、近づく速さを調整できます。
0.0 に近いほどゆっくり移動し、1.0 に近いほどすばやく移動します。
このアルゴリズムについては、減速(摩擦)しながら移動させたいにまとめています。
例) 「ムービークリップの座標」を「マウスカーソルの座標」に近づける
// 初回に一度だけ実行されるイベント
onClipEvent (load) {
// 摩擦係数 (0.0 ~ 1.0)
friction = 0.15;
}
// 毎フレーム実行されるイベント
onClipEvent (enterFrame) {
// ムービークリップの座標をマウスカーソルの座標に近づける
_x += (_root._xmouse - _x) * friction;
_y += (_root._ymouse - _y) * friction;
}
例) 「ムービークリップ mc の座標」を「マウスカーソルの座標」に近づける(Flash 6 以降)
// 摩擦係数 (0.0 ~ 1.0)
var friction = 0.15;
// 毎フレーム実行されるイベント
mc.onEnterFrame = function (){
// ムービークリップの座標をマウスカーソルの座標に近づける
this._x += (_root._xmouse - this._x) * friction;
this._y += (_root._ymouse - this._y) * friction;
};
3. OS のマウスカーソルを非表示に設定
次に、OS のマウスカーソルを非表示にします。
Mouse.hide() を呼び出すと、Flashプレイヤー上のマウスカーソルが非表示になります。
一度でも実行すれば効果は持続します。
例) マウスカーソルを非表示
// OS のマウスカーソルを非表示に設定
Mouse.hide();
元に戻すには、Mouse.show() を呼び出します。
例) マウスカーソルを可視表示
// OS のマウスカーソルを可視表示に設定
Mouse.show();
4.マウスカーソルをスムーズに移動させる
マウスカーソルがスムーズに動くようにしたい場合は、Flash のフレームレートを高めに設定する必要があります。
自作のマウスカーソルを動かした方向に向ける
■動かしたマウスの方向を向くマウスカーソルを作成する
移動したマウスの方向を向き続ける、マウスカーソルを作成してみます。
1.マウスカーソル用の素材を用意する
マウスカーソル用の素材を用意して、ムービークリップを作成します。
マウスカーソルは右向きにします。グラフィックの方向は、重要となります。
2.「マウスカーソル用のムービークリップ」にスクリプトを追加する
「マウスカーソル用のムービークリップ」に、以下のスクリプトを記述します。
「1フレーム前のマウスカーソルの座標」を残しておきます。
「1フレーム前のマウスカーソルの座標」と「現在の座標」の、2つの座標から角度を計算します。
得られた「角度」を、「マウスカーソル用ムービークリップ」の角度にセットします。
このアルゴリズムについては、2つの座標から角度を求めるにまとめています。
例)「ムービークリップの角度」に「マウスを動かした方向」をセットする
// 初回に一度だけ実行されるイベント
onClipEvent (load) {
// 1フレーム前の座標
x_old = _root._xmouse;
y_old = _root._ymouse;
}
// マウスカーソルを移動するたびに実行されるイベント
onClipEvent (mouseMove) {
// マウスカーソルの座標をムービークリップの座標にセット
_x = _root._xmouse;
_y = _root._ymouse;
// 「1フレーム前の座標」と「現在の座標」との角度を計算
var r = Math.atan2(_root._ymouse - y_old,_root._xmouse - x_old) * 180 / Math.PI;
// 角度を反映
_rotation = r;
// マウス座標の値を変数に残す
x_old = _root._xmouse;
y_old = _root._ymouse;
}
例)「ムービークリップ mc の角度」に「マウスを動かした方向」をセットする(Flash 6 以降)
// 1フレーム前の座標
var x_old = _root._xmouse;
var y_old = _root._ymouse;
// マウスカーソルを移動するたびに実行されるイベント
mc.onMouseMove = function (){
// マウスカーソルの座標をムービークリップの座標にセット
this._x = _root._xmouse;
this._y = _root._ymouse;
// 「1フレーム前の座標」と「現在の座標」との角度を計算
var r = Math.atan2(_root._ymouse - y_old,_root._xmouse - x_old) * 180 / Math.PI;
// 角度を反映
this._rotation = r;
// マウス座標の値を変数に残す
x_old = _root._xmouse;
y_old = _root._ymouse;
};
マウスの座標は、1ドット単位で取得できます。
マウスをゆっくり動かした場合、角度の精度が低くなります。
0度、45度、90度、135度、180度、225度、270度、315 度のどれかになりがちです。
このままではカクカクした動きになってしまうので、ゆっくりと角度を変更するように修正します。
このアルゴリズムについては、2つの角度の差を計算するにまとめています。
例)「マウスを動かした方向」に「ムービークリップの角度」をゆっくり近づける
// 初回に一度だけ実行されるイベント
onClipEvent (load) {
// 1フレーム前の座標
x_old = _root._xmouse;
y_old = _root._ymouse;
// 角度(ターゲット)
target = 0;
// 摩擦係数 (0.0 ~ 1.0)
friction = 0.2;
}
// マウスカーソルを移動するたびに実行されるイベント
onClipEvent (mouseMove) {
// マウスカーソルの座標をムービークリップの座標にセット
_x = _root._xmouse;
_y = _root._ymouse;
// 「1フレーム前の座標」と「現在の座標」との角度を計算
target = Math.atan2(_root._ymouse - y_old,_root._xmouse - x_old) * 180 / Math.PI;
// 「ターゲット」と「現在の角度」との角度差
var sub = target - _rotation;
sub -= Math.floor(sub / 360) * 360;
if(sub > 180) sub -= 360;
// ターゲットにゆっくり近づくように角度を加算
var spd = sub * friction;
_rotation += spd;
// マウス座標の値を変数に残す
x_old = _root._xmouse;
y_old = _root._ymouse;
}
例)「マウスを動かした方向」に「ムービークリップの角度」をゆっくり近づける(Flash 6 以降)
// 1フレーム前の座標
var x_old = _root._xmouse;
var y_old = _root._ymouse;
// 角度(ターゲット)
var target = 0;
// 摩擦係数 (0.0 ~ 1.0)
var friction = 0.2;
// マウスカーソルを移動するたびに実行されるイベント
mc.onMouseMove = function (){
// マウスカーソルの座標をムービークリップの座標にセット
this._x = _root._xmouse;
this._y = _root._ymouse;
// 「1フレーム前の座標」と「現在の座標」との角度を計算
target = Math.atan2(_root._ymouse - y_old,_root._xmouse - x_old) * 180 / Math.PI;
// 「ターゲット」と「現在の角度」との角度差
var sub = target - this._rotation;
sub -= Math.floor(sub / 360) * 360;
if(sub > 180) sub -= 360;
// ターゲットにゆっくり近づくように角度を加算
var spd = sub * friction;
this._rotation += spd;
// マウス座標の値を変数に残す
x_old = _root._xmouse;
y_old = _root._ymouse;
};
3. OS のマウスカーソルを非表示に設定
次に、OS のマウスカーソルを非表示にします。
Mouse.hide() を呼び出すと、Flashプレイヤー上のマウスカーソルが非表示になります。
一度でも実行すれば効果は持続します。
例) マウスカーソルを非表示
// OS のマウスカーソルを非表示に設定
Mouse.hide();
元に戻すには、Mouse.show() を呼び出します。
例) マウスカーソルを可視表示
// OS のマウスカーソルを可視表示に設定
Mouse.show();
4.マウスカーソルをスムーズに移動させる
最後に、Flash のフレームレートが低いときでも、マウスカーソルがスムーズに動くようにします。
マウスカーソル移動のイベント中に、 updateAfterEvent() 関数を呼び出します。
updateAfterEvent() 関数を実行すると、Flash のフレームレートに関係なく、再描画する事ができます。
例) マウスカーソルを移動するたびに再描画する
// 初回に一度だけ実行されるイベント
onClipEvent (load) {
/* 略 */
// OS のマウスカーソルを非表示に設定
Mouse.hide();
}
// マウスカーソルを移動するたびに実行されるイベント
onClipEvent (mouseMove) {
/* 略 */
// マウスが動くたびに再描画する
updateAfterEvent();
}
例) マウスカーソルを移動するたびに再描画する (Flash 6 以降)
/* 略 */
// OS のマウスカーソルを非表示に設定
Mouse.hide();
// マウスカーソルを移動するたびに実行されるイベント
mc.onMouseMove = function (){
/* 略 */
// マウスが動くたびに再描画する
updateAfterEvent();
};
インスタンスをドラッグする
■インスタンスをドラッグする
ムービークリップを、ドラッグしてみます。
Flash 5 でドラッグを実現する場合、少々手間が掛かります。
■Flash 5 でドラッグを実現する
Flash 5 でムービークリップをドラッグできるようにしてみます。
1. イラストを用意
まず、ドラッグしたい画像を用意して、ボタンを作成します。
このボタンを使用して、さらにムービークリップを作成します。
ムービークリップの中にボタンを格納 |
2. ドラッグ開始
startDrag() メソッドを使用するとインスタンスをドラッグする事ができます。
ドラッグしたいムービークリップから呼び出します。
インスタンスの座標が、マウスカーソルの座標に追従して同時に移動するようになります。
MovieClip.startDrag ( 中央吸着するか? , x 座標最小値 , y 座標最小値 , x 座標最大値 , y 座標最大値 ) :Void
第01引数 | Boolean | ドラッグ時に中央に吸着するかしないか |
第02引数(略可) | Number | ドラッグの範囲制限 x 座標の最小値 |
第03引数(略可) | Number | ドラッグの範囲制限 y 座標の最小値 |
第04引数(略可) | Number | ドラッグの範囲制限 x 座標の最大値 |
第05引数(略可) | Number | ドラッグの範囲制限 y 座標の最大値 |
戻り値 | Void | なし |
第02~05 引数を設定すると、ドラッグで移動可能な範囲を制限できます。
ムービークリップの中に入り、ボタンに対して、以下のスクリプトを記述します。
ボタンをクリックしたときに上の階層のムービークリップのドラッグを開始する
// 「インスタンスの上」で「マウスボタンを押したとき」に実行されるイベント
on (press) {
// ドラッグを開始する
this.startDrag (true);
}
ドラッグの移動範囲を制限する例です。
ドラッグの移動範囲を制限する
// 「インスタンスの上」で「マウスボタンを押したとき」に実行されるイベント
on (press) {
// ドラッグを開始する(移動制限付き)
this.startDrag (true,100,50,400,300);
}
3. ドラッグを解除する
マウスボタンを離しても、ドラッグが自動的に解除されることはありません。
ドラッグを解除するには、マウスボタンを離すタイミングで、stopDrag() 関数を呼び出す必要があります。
マウスが離されたときにドラッグを解除する
// 「インスタンスの上」で「マウスボタンを押したとき」に実行されるイベント
on (press) {
// ドラッグを開始する
this.startDrag (true);
}
// 「インスタンスの上」で「マウスボタンを離したとき」に実行されるイベント
on (release) {
// ドラッグを解除する
stopDrag ();
}
高速でマウスカーソルを移動しながらマウスを離した時に、on (release) イベントを取りこぼす事があります。
仕様に問題が無ければ、onClipEvent(mouseUp) イベントを使用して、マウスボタンが離されたときに stopDrag() 関数を呼び出すようにします。
これでより確実にドラッグを解除することができます。
以下のスクリプトを、ムービークリップの方に記述します。
マウスボタンが離されたときにドラッグを解除する
//「マウスボタンを離したとき」に実行されるイベント
onClipEvent (mouseUp){
// ドラッグを解除する
stopDrag ();
}
4. ドラッグをスムーズに移動させる
最後に、Flash のフレームレートが低いときでも、マウスカーソルがスムーズに動くようにします。
マウスカーソル移動のイベント中に、 updateAfterEvent() 関数を呼び出します。
updateAfterEvent() 関数を実行すると、Flash のフレームレートに関係なく、再描画する事ができます。
マウスカーソルを移動するたびに再描画する
// マウスカーソルを移動するたびに実行されるイベント
onClipEvent (mouseMove) {
// マウスが動くたびに再描画する
updateAfterEvent();
}
■Flash 6 以降でドラッグを実現する
Flash 6 以降でムービークリップをドラッグできるようにしてみます。
1. イラストを用意
まず、ドラッグしたい画像を用意して、ムービークリップを作成します。
配置して、インスタンス名に "drag_00"と名前を付けます。
2. ドラッグ開始
startDrag() メソッドを使用するとインスタンスをドラッグする事ができます。
ドラッグしたいムービークリップから呼び出します。
インスタンスの座標が、マウスカーソルの座標に追従して同時に移動するようになります。
MovieClip.startDrag ( 中央吸着するか? , x 座標最小値 , y 座標最小値 , x 座標最大値 , y 座標最大値 ) :Void
第01引数 | Boolean | ドラッグ時に中央に吸着するかしないか |
第02引数(略可) | Number | ドラッグの範囲制限 x 座標の最小値 |
第03引数(略可) | Number | ドラッグの範囲制限 y 座標の最小値 |
第04引数(略可) | Number | ドラッグの範囲制限 x 座標の最大値 |
第05引数(略可) | Number | ドラッグの範囲制限 y 座標の最大値 |
戻り値 | Void | なし |
第02~05 引数を設定すると、ドラッグで移動可能な範囲を制限できます。
タイムラインに、以下のスクリプトを記述します。
「ムービークリップ drag_00 」をクリックしたときにドラッグを開始する
// 「インスタンスの上」で「マウスボタンを押したとき」に実行されるイベント
drag_00.onPress = function (){
// ドラッグを開始する
this.startDrag (true);
};
ドラッグの移動範囲を制限する例です。
ドラッグの移動範囲を制限する
// 「インスタンスの上」で「マウスボタンを押したとき」に実行されるイベント
drag_00.onPress = function (){
// ドラッグを開始する(移動制限付き)
this.startDrag (true,100,50,400,300);
};
3. ドラッグを解除する
マウスボタンを離しても、ドラッグが自動的に解除されることはありません。
ドラッグを解除するには、マウスボタンを離すタイミングで、stopDrag() 関数を呼び出す必要があります。
マウスが離されたときにドラッグを解除する
// 「インスタンスの上」で「マウスボタンを押したとき」に実行されるイベント
drag_00.onPress = function (){
// ドラッグを開始する
this.startDrag (true);
};
// 「インスタンスの上」で「マウスボタンを離したとき」に実行されるイベント
drag_00.onRelease = function (){
// ドラッグを解除する
stopDrag ();
};
高速でマウスカーソルを移動しながらマウスを離した時に、onRelease イベントを取りこぼす事があります。
仕様に問題が無ければ、onMouseUp イベントを使用して、マウスボタンが離されたときに stopDrag() 関数を呼び出すようにします。
これでより確実にドラッグを解除することができます。
onMouseUp イベントを使って、マウスボタンが離されたときにドラッグを解除する
// 「インスタンスの上」で「マウスボタンを押したとき」に実行されるイベント
drag_00.onPress = function (){
// ドラッグを開始する
this.startDrag (true);
};
// 「マウスボタンを離したとき」に実行されるイベント
_root.onMouseUp = function (){
// ドラッグを解除する
stopDrag ();
};
4. ドラッグをスムーズに移動させる
最後に、Flash のフレームレートが低いときでも、マウスカーソルがスムーズに動くようにします。
マウスカーソル移動のイベント中に、 updateAfterEvent() 関数を呼び出します。
updateAfterEvent() 関数を実行すると、Flash のフレームレートに関係なく、再描画する事ができます。
マウスカーソルを移動するたびに再描画する
// マウスカーソルを移動するたびに実行されるイベント
_root.onMouseMove = function (){
// マウスが動くたびに再描画する
updateAfterEvent();
};
インスタンスをドロップする
■Flash 5 でドロップを実現する
Flash 5 でムービークリップをドロップできるようにしてみます。
1.ドロップの当たり判定用のイラストを用意する
まず、ドロップの判定用のシェイプを用意します。このシェイプの形状がそのまま当たり判定となります。
このシェイプを使用してムービークリップを作成します。
画像をドロップ用の素材として使用すると、当たり判定が矩形になるので注意します。
次に、ムービークリップに、インスタンス名を付けます。ここでは、"drop_00" と名前を付けます。
Flash5 の場合 |
2.ドロップされたか調べる
ドラッグ中のマウスカーソルの真下にあるインスタンスを取得するには、ムービークリップの _droptarget プロパティを使用します。
このプロパティにインスタンスのターゲットパスが、
「/インスタンス名 / インスタンス名 / …」という文字列で格納されています。
デバッガで確認する |
これを、スラッシュシンタックスといいます。
ドットシンタックス 「_root.インスタンス名.インスタンス名.…」では無いので注意して下さい。
「スラッシュシンタックス」から、「インスタンスの参照」に変換するには、eval() 関数を使用します。
ドラッグしたいムービークリップに、以下のアクションスクリプトを記述します。
ドラッグしてマウスボタンを離すときに、「ドロップ用ムービークリップ」との当たり判定を調べます。
当たり判定がある場合、「ドロップ用のムービークリップ」の座標に吸着させます。
ドロップ時にマウスカーソルの真下に "drop_00" があればその座標に吸着させる
// 「インスタンスの上」で「マウスボタンを押したとき」に実行されるイベント
on (press) {
// ドラッグ開始(中央に吸着する)
this.startDrag (true);
}
//「マウスボタンを離したとき」に実行されるイベント
onClipEvent (mouseUp){
//ドラッグ中のインスタンスの真下に _root.drop_00 があるか
if (eval(this._droptarget) == _root.drop_00) {
//_root.drop_00 の座標に吸着
this._x = _root.drop_00._x;
this._y = _root.drop_00._y;
}
// ドラッグ終了
stopDrag();
}
■Flash 6 以降でドラッグを実現する
Flash 6 以降でムービークリップをドロップできるようにしてみます。
1.ドロップの当たり判定用のイラストを用意する
まず、ドロップの判定用のシェイプを用意します。このシェイプの形状がそのまま当たり判定となります。
このシェイプを使用してムービークリップを作成します。
画像をドロップ用の素材として使用すると、当たり判定が矩形になるので注意します。
次に、ムービークリップに、インスタンス名を付けます。ここでは、"drop_00" と名前を付けます。
FlashMX2004 の場合 |
2.ドロップされたか調べる
ドラッグ中のマウスカーソルの真下にあるインスタンスを取得するには、ムービークリップの _droptarget プロパティを使用します。
このプロパティにインスタンスのターゲットパスが、
「/インスタンス名 / インスタンス名 / …」という文字列で格納されています。
デバッガで確認する |
これを、スラッシュシンタックスといいます。
ドットシンタックス 「_root.インスタンス名.インスタンス名.…」では無いので注意して下さい。
「スラッシュシンタックス」から、「インスタンスの参照」に変換するには、eval() 関数を使用します。
ドラッグしたいムービークリップに、以下のアクションスクリプトを記述します。
ドラッグしてマウスボタンを離すときに、「ドロップ用ムービークリップ」との当たり判定を調べます。
当たり判定がある場合、「ドロップ用のムービークリップ」の座標に吸着させます。
"drag_00" をドロップ時に、マウスカーソルの真下に "drop_00" があれば、その座標に吸着させる
// 「インスタンスの上」で「マウスボタンを押したとき」に実行されるイベント
drag_00.onPress = function (){
// ドラッグを開始する
this.startDrag (true);
};
// 「マウスボタンを離したとき」に実行されるイベント
drag_00.onMouseUp = function (){
//ドラッグ中の「 drag_00 インスタンス」の真下に 「drop_00 インスタンス」があるか
if (eval(this._droptarget) == drop_00) {
//_root.drop_00 の座標に吸着
this._x = drop_00._x;
this._y = drop_00._y;
}
};
// 「マウスボタンを離したとき」に実行されるイベント
_root.onMouseUp = function (){
// ドラッグを解除する
stopDrag ();
};
マウスホイールの回転を取得する(Flash 7 以降)
サンプルをダウンロード
マウスホイールの回転を取得する
マウスホイールの回転を取得するには、マウスイベントリスナーを使用します。
イベントリスナーについて
イベントハンドラを使用すると、一人のハンドラーがイベント通知を得ることができます。
イベントリスナーを使用すると、複数のリスナーがイベント通知を得ることができます。
マウスイベントリスナーを使用すると、マウス入力関係のイベント通知を知ることができます。
オブジェクトを作成する
オブジェクトを作成します。
このオブジェクトは、リスナーに相当します。
オブジェクト作成
// オブジェクトを作成
var listener = new Object();
オブジェクトに関数を登録する
オブジェクトに、以下のプロパティを追加します。
各プロパティには、コールバック関数を登録します。
プロパティ名 | 解説 |
onMouseDown | マウスボタンを押した時に実行される |
onMouseUp | マウスボタンを離した時に実行される |
onMouseMove | マウスカーソルを移動するたびに実行される |
onMouseWheel | マウスホイールを回転すると実行される |
オブジェクトに関数を登録
// オブジェクトを作成
var listener = new Object();
// マウスボタンを押した時に実行されるイベント
listener.onMouseDown = function (){
trace("マウスボタンを押した");
};
// マウスボタンを離した時に実行されるイベント
listener.onMouseUp = function (){
trace("マウスボタンを離した");
};
// マウスカーソルを移動するたびに実行されるイベント
listener.onMouseMove = function (){
trace("マウスカーソルを移動した");
};
// マウスホイールを回転すると実行されるイベント
listener.onMouseWheel = function (){
trace("マウスホイールを回転した");
};
onMouseWheel イベントについて
onMouseWheel プロパティに登録した、関数の引数から2つのパラメータを取得できます。
第01引数からは、ホイールの回転速度が取得できます。
上方向に回すと正の値、下方向に回すと負の値が得られます。
ホイールの回転が速いと、値が大きくなります。
第02引数からは、マウスカーソルの真下にある「インスタンスの参照」が取得できます。
onMouseWheel イベントにコールバック関数を登録する
var listener = new Object();
// マウスホイールを回転するたびに実行されるイベント
listener.onMouseWheel = function (delta , scrollTarget){
trace("ホイールの回転:" + delta);
trace("真下のインスタンスの参照:" + scrollTarget);
};
リスナーを登録する(リッスンを開始する)
システムにリスナーを登録するには、Mouse.addListener() メソッドを使用します。
引数に、「コールバック関数をセットしたオブジェクト」を渡します。
これで、マウスの入力があるたびに、コールバック関数が実行されるようになります。
リッスンを開始する
// ------------------------------------------------------------
// リスナー用オブジェクトを作成
// ------------------------------------------------------------
// オブジェクトを作成
var listener = new Object();
// ------------------------------------------------------------
// リスナーにコールバック関数を登録
// ------------------------------------------------------------
// マウスボタンを押した時に実行されるイベント
listener.onMouseDown = function (){
trace("マウスボタンを押した");
};
// マウスボタンを離した時に実行されるイベント
listener.onMouseUp = function (){
trace("マウスボタンを離した");
};
// マウスカーソルを移動するたびに実行されるイベント
listener.onMouseMove = function (){
trace("マウスカーソルを移動した");
};
// マウスホイールを回転すると実行されるイベント
listener.onMouseWheel = function (delta , scrollTarget){
trace("マウスホイールを回転した");
trace("ホイールの回転:" + delta);
trace("真下のインスタンスの参照:" + scrollTarget);
};
// ------------------------------------------------------------
// システムにリスナーを登録
// ------------------------------------------------------------
// リスナーを登録(リッスンを開始する)
Mouse.addListener( listener );
リスナーを除外する(リッスンを終了する)
イベント通知を止めたいときは、Mouse.removeListener() メソッドを使用します。
引数に、「Mouse.addListener() メソッドの引数で指定したオブジェクト」と同じものを渡します。
リッスンを終了する
// ------------------------------------------------------------
// リスナー用オブジェクトを作成
// ------------------------------------------------------------
// オブジェクトを作成
var listener = new Object();
// ------------------------------------------------------------
// リスナーにコールバック関数を登録
// ------------------------------------------------------------
// マウスボタンを押した時に実行されるイベント
listener.onMouseDown = function (){
trace("マウスボタンを押した");
};
// マウスボタンを離した時に実行されるイベント
listener.onMouseUp = function (){
trace("マウスボタンを離した");
};
// マウスカーソルを移動するたびに実行されるイベント
listener.onMouseMove = function (){
trace("マウスカーソルを移動した");
};
// マウスホイールを回転すると実行されるイベント
listener.onMouseWheel = function (delta , scrollTarget){
trace("マウスホイールを回転した");
trace("ホイールの回転:" + delta);
trace("真下のインスタンスの参照:" + scrollTarget);
};
// ------------------------------------------------------------
// システムにリスナーを登録
// ------------------------------------------------------------
// リスナーを登録(リッスンを開始する)
Mouse.addListener( listener );
// リスナーを除外(リッスンを終了する)
Mouse.removeListener( listener );