- 締切済み
マウスホイールでタイムライン制御
マウスホイールを上下に動かす事でタイムラインを 1フレームからトータルフレームまで行き来する (マウスホイールを手前に回すと、タイムラインが動きだし 逆に回すと逆再生する) flashを作りたいのですが、x軸y軸をプラス、 マイナスする方法しかわかりません。どなたかマウス ホイールアクションonMouseWheelでタイムライン上を 行き来させる方法がわかる方いらっしゃいますでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
とりあえず参考URL 「マウスホイールを回してアクションしたい(FlashMX2004)」 http://hakuhin.hp.infoseek.co.jp/main/as/mouse.html#MOUSE_04 #1の方の回答から引用 > マウスホイールで1フレーム目(ASを書いたフレーム)に行ってしまうと、 > リスナーが2重、3重に登録されてしまうので そうかーー,なるほど! 目から鱗の回答ありがとうございます。 このご質問で作ったもので検証のため遊んでいると, どんどん onMouseWheel の実行の数が多くなって, 何でなんだろう??? と,それが疑問でここに回答できませんでした。 言われてみるとそうですね。 原因がわかると簡単に対処できます。 一応対処法入りの私が用意していた回答↓。 //////////////////////////////////////////////////////////////////// // とりあえず _root をストップ this.stop(); // // マウスクラスのリスナーに登録したオブジェクトを削除(重複登録防止) Mouse.removeListener(mouseListener); // // _root に マウスホイールを監視するオブジェクトの作成 var mouseListener:Object = new Object(); // // マウスホイールが回転したときの関数を定義 mouseListener.onMouseWheel = function(dlt) { _root.gotoAndStop(_currentframe+(dlt/Math.abs(dlt))); }; // // マウスクラスのリスナーに 作成したオブジェクトを登録 Mouse.addListener(mouseListener); //////////////////////////////////////////////////////////////////// 登録する前に削除しておけば,1フレームに何度行っても重複登録は防げます。 最初の最初は何も登録されていないのに, いきなり削除するとは邪道かもしれませんが, エラーも何も出ませんでしたから, 一応OKではないでしょうか??? (ちょっと自信なし) ======================= _root.gotoAndStop(_currentframe+(dlt/Math.abs(dlt))); に関してです。 Mac は無視するとして, Windows 環境でマウスホイールの回転を調整する場合は, 「スタート」→「コントロールパネル」→「マウス」で, 「マウスのプロパティ」パネルが出てきますから, マウスタブを選択し,「ホイール」タブを選択し, 「1度に次の行スクロールする」の値で設定できます 私の場合,この値が 3 (3行スクロール)になっているので, ホイールの回転で得られる値が3や-3になりますが,誰しも3とは限りません。 またいつも3とは限りません。 1の人もいれば,20の人もいるかもしれません。 ですから, dlt/Math.abs(dlt) を使っています。 Math.abs() は,( )内の数を絶対値で返します。 仮に dlt(delta) に -20 が入ると, dlt/Math.abs(dlt) = -20/20 = -1 になります。 どんな数が入っても -1 か 1 になるので, 1フレーム単位で制御できます。 Mac は マウスホイール の動きを Flash で受け取ることができませんので, onMouseWheel などは, Windowsのみ対応という条件で使用してください。 というか,元から環境に大きく左右されますし, マウスホイール自体がないマウスを使用されている方もいますから, マウスホイールを使ったことは,重要な場所には使わない方が良いです。 重要な場所とは, 次のページに行くなどメニューのような場面です。 マウスホイールがなければ次のページに進めませんから,せっかく作ったページなどに行けなくなってしまいます。
- perse
- ベストアンサー率74% (113/152)
>x軸y軸をプラス、マイナスする方法しかわかりません。 そこまでわかってるなら簡単です。 プラスなら次のフレーム、 マイナスなら前のフレームにgotoAndStop()させればいいんです。 例えば2フレーム目から11フレーム目に1~10の数字を書きます。 以下のスクリプトを1フレーム目に記述します。 //------------------------------------------------------------- this.stop(); var mouseListener:Object = new Object(); mouseListener.onMouseWheel = function(delta) { trace(delta); var cur = _root._currentframe;//現在のフレーム位置 if (delta<0 && cur>2) { //ホイールアクションがマイナス方向で //フレーム位置が2フレームより大きいとき _root.gotoAndStop(cur-1); //一つ戻る } else if (delta>0 && cur<_root._totalframes) { //プラス方向で全フレーム数より小さいとき _root.gotoAndStop(cur+1); //次に進む } }; Mouse.addListener(mouseListener); //--------------------------------------------------------------- マウスホイールで1フレーム目(ASを書いたフレーム)に行ってしまうと、 リスナーが2重、3重に登録されてしまうので 1フレーム目を通るのは一回だけになるように注意してください。