- 締切済み
actionscript、戻るボタン、進むボタンについて
進むボタンを押した時、次のページに進み、戻るボタンを押した時、前のページに戻るというFlashを作成しています。 戻るボタンに下のコードを記入した時、 最初のページに戻った後、何回もボタンが押せてしまいますが、 「戻るボタン」で押した回数分だけ「進むボタン」を押さないと、 次のページに進むことがませんでした。 最初のページまで戻ったら、そこでストップさせるにはどのようなコードを書いたら良いのでしょう。。 教えていただけたら幸いです。 on (release) { var test_img = ""; a = a-1; test_img = "test"+a; _root.test_mc.gotoAndStop(test_img); }
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- BlurFiltan
- ベストアンサー率91% (1611/1754)
「ページ」とは何かわかりません。 Flash内にはページという概念はないので,パッと聞くと getURL で開く HTML のページを連想します。 しかし,スクリプトを見ると, 「フレームラベルのラベル名がついたフレーム」 のことを「ページ」と命名されているように思います。 それでよろしいでしょうか。 そういうこととして回答します。 ◎第1案 _root.test_mc.gotoAndStop をしているということは,停止stopさせるのですよね。 stop させるのでしたらフレームラベルの付いたフレーム間は0フレームであるように思えます。 つまり test1,test2,test3,… はすべて隣りあっているフレームのように思えます。 その場合でしたら単純に, 「戻るボタン」 ------------------------ on (release) { _root.test_mc.prevFrame(); } ------------------------ 「進むボタン」 ------------------------ on (release) { _root.test_mc.nextFrame(); } ------------------------ とすれば良いと思います。 ◎第2案 フレームラベル test1,test2,test3,… というラベル名を付けたフレームが隣りあっていない場合です。 妙な技巧的方法(もしくは邪道な方法)ですが, 次のようにすればできます。 まずボタンがあるフレームに, ------------- a = 1; ------------- と書くなどして a の初期値を決定しておきます。 「戻るボタン」 ------------------------ on (release) { // 変数 my_frame に 今のフレーム番号 を保存 my_frame = _root.test_mc._currentframe; // 試しに1つ前のフレームラベルに行ってみる _root.test_mc.gotoAndStop("test"+(a-1)); // もし 試しに行ったフレームが 保存したフレーム番号 ではない場合 if (_root.test_mc._currentframe != my_frame) { // 変数 a を 1 減算 a--; } } ------------------------ 「進むボタン」 ------------------------ on (release) { // 変数 my_frame に 今のフレーム番号 を保存 my_frame = _root.test_mc._currentframe; // 試しに1つ後のフレームラベルに行ってみる _root.test_mc.gotoAndStop("test"+(a+1)); // もし 試しに行ったフレームが 保存したフレーム番号 ではない場合 if (_root.test_mc._currentframe != my_frame) { // 変数 a を 1 加算 a++; } } ------------------------ 「行けるかどうか行ってみてから判断する」という, 専門家に言わせれば怒られそうな方法ですが,一応上のスクリプトできると思います。 メリットは,test1,test2,test3,… が何番まであっても同じスクリプトでできることです。 邪道かもしれませんが工夫のうちの1つです。 ◎第3案 第2案の正攻法版です。 普通はこうするでしょう。 まずボタンがあるフレームに, ------------- a = 1; ------------- と書くなどして a の初期値を決定しておきます。 そしてフレームラベルは test1,test2,test3,test4,test5 という5つのフレームがある場合だとします。 「戻るボタン」 ------------------------ on (release) { // もし a の値が 1 より大きいとき if (a>1) { // 変数 a を 1 減算 a--; // そのフレームラベルのフレームに行く _root.test_mc.gotoAndStop("test"+a); } } ------------------------ 「進むボタン」 ------------------------ on (release) { // もし a の値が 5 未満のとき if (a<5) { // 変数 a を 1 加算 a++; // そのフレームラベルのフレームに行く _root.test_mc.gotoAndStop("test"+a); } } ------------------------ 要はこの 第3案 のように普通にすれば良いだけです。 純粋に普通に考えればそうなると思います。 「今はビルの4階だ。1階上は5階だ。5階はあるからさあ登ろう。」 「今はビルの5階だ。1階上は6階だ。6階はないから登らない。」 みたいな感じです。 もしビルが何階まであるのかわからなければ, 弟2案 のようにイチかバチか登ってみて,その結果からなんとかするしかありませんが, フレームラベルの番号の数は把握しているはずですから, 第3案 のようにするのが普通の方法と言えます。 プログラムとかActionScriptとかいう感覚ではなくて, 日常生活で人間が普通に考えるように,Flashにも普通に考えさせれば良いだけだと思います。 FLASHアクションスクリプト入門編 if / if else文 http://isvalid.jp/actionscriptLab/ASlesson/actionsctipt_if.html
テストはしていないのですが、これではダメでしょうか・・・? aが0より大きい場合、つまり1,2,3...(後略)の時だけ計算させればいいので on (release) { var test_img = ""; //aが0より大きいなら if (a > 0){ a = a-1;//aの値を1減らす } test_img = "test"+a; _root.test_mc.gotoAndStop(test_img); }