• 締切済み

FLASH上での戻るボタン。

一つのシーンの中にラベルで10コに分けられた、ムービーがあります。 それぞれのラベルから他の9つのラベルに遷移可能です。 それぞれラベル中に戻るボタンを設置して、 辿った形跡どおりに戻るボタンで画面遷移をさせたいのですが、 どのように画面遷移した履歴を残すのかが分かりません。 分かられる方がいらっしゃたら回答の程宜しくお願い致します。 環境はMac OS X FLASH 8です。 宜しくお願い致します。

みんなの回答

noname#35109
noname#35109
回答No.1

仮にフレームラベルが, 『 A,B,C,D,E,F,G,H,I,J 』 の 10 個だったとします。 (実際は個数も名前も自由です。これは説明のための例です。) ◎移動例 ------------------ もし, A→B→C→D→E と,普通のボタンで移動した後, 「戻る」ボタンが2回クリックされ,次に, →J と普通のボタンで移動したとします。 すると移動は A→B→C→D→E→D→C→J のようになります。 -------------------------- この移動例の履歴を全て残した場合, A→B→C→D→E→D→C→J となってしまいます。 このJの状態から例えば「戻る」ボタンを3回クリックすると, (J)→C→D→E と移動します。 しかし, ブラウザのような「戻る」ボタンのようなものは,こうはなっていません。 移動例のように移動した場合,履歴は, A→B→C→J と記録されています。 このJの状態から「戻る」ボタンを3回クリックすると, (J)→C→B→A と移動します。 A とか B とかで言うとややこしいかもしれませんが, ブラウザの「戻る」「進む」ボタンは実際に上で説明したようになっています。 //////////////////////////////////////////////// というわけで, 「戻る」ボタンの履歴や,それによる重複データまで残すと, 人間の感性からして,変な動きになるので, ブラウザ的な「戻る」を考えてみました。 すると次のような感じになりました。 ●_roor の "フレーム1" に書くスクリプト(コピペ可) ----------------------------------- // とりあえずストップ(なくても良い) this.stop(); // 変数 countの初期値を-1に設定 var count = -1; // 配列 histArr の作成 var histArr = new Array(); // ユーザ定義関数 historyRecord の定義 function historyRecord(lab) { // 変数 count の値を 1 加算 count++; // 配列 histArr のエレメントに 引数 lab の値を挿入 histArr[count] = lab; // 今より後のエレメントを削除 histArr.splice(count+1); // histArr の確認のため(※本当は不要) trace(histArr); // _root のフレームを 引数 lab の値へ移動 _root.gotoAndStop(lab); } ----------------------------------- これは,配列のエレメント(要素)として, フレームラベル名を記録していくスクリプトです。 各移動用のボタンに長々と同じ事を書くのは変ですので, ユーザー定義関数 historyRecord にまとめました。  // 今より後のエレメントを削除  histArr.splice(count+1); これが,最初に説明した,「戻る」ボタンクリックでの,履歴の重複を消す部分です。 今現在より後の配列のエレメントがあってもなくても,後のエレメントを常に削除しています。  // histArr の確認のため(※本当は不要)  trace(histArr); これは,本当に不要な行です。単なるデータ確認用です。 配列のエレメントがどういう具合に記録されているのかを見たい場合は, この行を残して, 「制御」→「ムービープレビュー」で確認してください。 配列の中身の動きが見えます。 ●各レベルに行くボタンに書くスクリプト(コピペ可) ----------------------------------- on (release) { // 関数 historyRecord の実行(<例>引数="label1") _root.historyRecord("label1"); } ----------------------------------- このスクリプトは, 上のユーザ定義関数 historyRecord を実行させるだけのスクリプトを書いています。 "label1"は単なる例で,ここに行くラベル名を書いてください。 実際のフレームラベルのラベル名はなんでもかまいません。 ●「戻る」ボタンに書くスクリプト(コピペ可) ----------------------------------- on (release) { // 変数 count の値が 0 より大きければ if (_root.count>0) { // 変数 count の値を 1 減算 _root.count--; // _root のフレームを histArr の // count 番目のエレメントに移動(エレメント開始は0) _root.gotoAndStop(_root.histArr[count]); } } ----------------------------------- これは,コメント行も入れていますし, 見たまんまですね。 ●「進む」ボタンに書くスクリプト(コピペ可) ----------------------------------- on (release) { // 変数 count の値が histArr のエレメント数より小さければ if (_root.count<_root.histArr.length-1) { // 変数 count の値を 1 加算 _root.count++; // _root のフレームを histArr の // count 番目のエレメントに移動(エレメント開始は0) _root.gotoAndStop(_root.histArr[count]); } } ----------------------------------- 「進む」ボタンに関しては, ご質問に書かれていませんでしたが, 「戻る」ボタンとほとんど仕組みは同じなのでついでに書いてみました。 「進む」ボタンはブラウザの「進む」ボタンと同じで, 「戻る」ボタンが使われないと何も動作しません (当たり前ですけど見来は予言出来ませんので)。 「戻る」や「進む」ボタンのみで行き来するときに使うボタンです。 勝手に用意したものですから,当然なくてもかまいません。 以上です。 配列を使わなくてもできますが, かなりややこしくなるので配列を使いました。 function(ユーザ定義関数)もそうです。 使わなくてもできますが,かなりややこしくなるので function を使いました。 作成は一応 Flash 8 で作成してみて検証もしてみました。 配列 や function などを使っていて,ひょっとしたらハイレベルの最新なこと? と思われているかもしれませんが(思われていないかもしれませんが), 一応,Flash 5 でもフレーム移動はちゃんと動作しました。 上記は,Flash 5 以上(Flash Player 5 以上)対応のスクリプトです。

haden_107
質問者

お礼

詳細なご回答、本当に有り難うございました。 こちらで試したところ、条件によっては戻るが効かない事もあったのですが、 こちらの理解不足だと思われますので、お送りいただいたモノを元に勉強させていただきます。 有り難うございました。