• ベストアンサー

ActionScript

ActionScript を教えてください。 ドキュメント全体を透明なボタンでおおい、 画面をクリックすると次のフレームに進み、 左から右にマウスをドラッグすると前のフレームに戻るようにするにはどうしたらよいでしょうか? 進む方は、 on (release) { nextFrame(); } で、できたのですが、戻る方が全くわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

肝腎なバージョンを書かれていませんが。。。 > on (release) { > nextFrame(); > } これは Flash 5 以上 で使用できる範囲の ActionScript 1.0 ですね。 しかし。。。 Flash 5(12年くらい前のバージョン) は古すぎて 構造作り直しなども大変(回答するのもかなり面倒)になりますから 勝手に Flash MX 以上をお持ちで ActionScript 1.0 を使うものということに決めます。 Flash MX 以上とは Flash MX,Flash MX 2004,Flash 8,Flash CS3,Flash CS4,… のことです。 まずは 「ドキュメント全体をおおう透明なボタン」からですが これ自体に書かれた on (release) {…} などのスクリプトを全て消します。 そして ステージ上のその透明ボタンを選択して プロパティインスペクタより「インスタンス名」を付けます。 ここでは「btn」というインスタンス名を付けることにしておきます。 ※参考【添付図】↓ そしてスクリプトを書くためのレイヤーを別に用意して (すでに用意してあればそのレイヤーで良いです), そのレイヤーのフレーム(フレーム1 など)に次のように書きます(コピペ可)。 //---------------------------------- //このタイムラインの再生を停止 stop(); //ドラッグする px 数の設定(※適当に変える) var drag_px = 50; //マウスを監視するオブジェクトを作成 var obj = new Object(); //マウスのリスナーとして obj を登録 Mouse.addListener(obj); //マウスをプレスした x座標 を入れる変数の宣言 var press_x; //「btn」プレス時の動作を定義 btn.onPress = function() { // //マウスをプレスした x座標 を変数に入れる press_x = _xmouse; // //「btn」クリック時の動作を定義 btn.onRelease = function() { //「btn」クリック時の動作を削除 delete btn.onRelease; //マウスが動いた時の動作を削除 delete obj.onMouseMove; //このタイムラインを次のフレームに進める nextFrame(); }; // //マウスが動いた時の動作を定義 obj.onMouseMove = function() { //マウスの座標がプレスした x座標 より drag_px 以上右になれば if (_xmouse>=press_x+drag_px) { //「btn」クリック時の動作を削除 delete btn.onRelease; //マウスが動いた時の動作を削除 delete obj.onMouseMove; //このタイムラインを前のフレームに戻す prevFrame(); } }; }; //---------------------------------- ※Flash MX 以上で使用可   Flash Player 6 以上で動作可   ActionScript 1.0(パブリッシュ設定は 2.0 でもOK) 「どれくらい(どこからどこまで)右にドラッグした時に前のフレームに戻すのか?」 などがわからなかったため勝手に, //ドラッグする px 数の設定(※適当に変える) var drag_px = 50; のようにして 50px 以上右にドラッグしたときにフレームを戻すようにしていますが この数値は適当に 10 とか 100 とかに変えてください。 あと, 「ドラッグ」には「ドロップ」が付き物です。 つまり 「マウスプレス」には「マウスアップ」が付き物です。 何が言いたいのかというと 「ドラッグ終了時に Flash 上でマウスアップする」ということは, 「ドキュメント全体をおおう透明なボタンをクリックする」のと同じことになるのです。 ですから「ドラッグ」が成立したときには 「透明なボタンクリック」を無効にしなければなりませんよね? でないと,また元のフレーム(次のフレーム)に戻ってしまいます。 そんなこんながあったり on (release) {} では スクリプトを書く場所が分散してしまってやりにくいので onRelease などを使うように変更しています。 ○○.onRelease=function(){}; や ○○.onMouseMove=function(){}; などを 「イベントハンドラメソッド」と言いますが これらは delete で削除することができるので使いやすいです。 on (release) {} など 「イベントハンドラ」の方は,スクリプトで削除できません。 もし on (release) {} などを使う方向で行く場合は 別にフラグとなる変数をいくつか用意するなどして 色々な条件分岐した動作を考える必要が出てきます。   ◎ 【添付図】↓ について バージョンがわからなかったので 適当に Flash 8 での画面↓を用意しましたが バージョンによって見かけは変わります。 Flash MX ~ CS3 までは比較的似ているかもしれませんが Flash CS4 以降は全く別な感じに見えると思います。

-mellotron-
質問者

お礼

うまくいきました!!!! 丁寧に説明していただいてありがとうございました。