• 締切済み

goto文が動かない orz

お世話になります、Flash8超初級ユーザーです。 if~goto命令がまったく効かない、という酷い内容で書きこませて頂きました・・・; とはいえ、今まで何百フレームも使ってきた簡単な命令が、一箇所だけ完全にスルーされてしまう 状況で、原因がまったく見えず困惑しきっております。 メインムービーに、アニメーションするキャラクターのMCと、エフェクトのMC、あとボタンが 配置されているシーンです。 ボタンを押す度に変数"genki"が増えていき、100%になると大暴れ、その後3回ボタンを押すと オーバーヒートしてしまう、というショボイ内容です・・・ 下がボタンのアクションスクリプトなのですが、 1 on(press){ 2    if(_root.genki >= 99){ 3       if(_root.genki >= 100){ 4          _root.maxgenki = 100; 5          _root.maxgover++; 6          if(_root.maxgover >= 3){ 7             gotoAndStop("元気_OH"); 8          } 9          gotoAndStop("元気_MAX超え"); 10       }else{ 11          gotoAndStop("元気_MAX"); 12       } 13    }else{ 14       gotoAndStop("元気"); 15    } 16 } 17 on(release){      ・      ・      ・      ・      ・ genki = キャラクターの動作速度を決めています(今回は100%判定のときの話のみですが) maxgenki = エフェクトの大きさを決めています(〃) maxgover = genkiが100%になると増えていく、オーバーヒート判定用の変数です。 ムービー全体のごく一部分なので、数値など不明瞭な点もあるかと思いますが・・・ 説明の必要は全く無いような簡単なスクリプトですが、この6,7行目の「"maxgover"が3かそれ以上 のとき、"元気_OH"フレームに移動する」という部分が全く機能せず、3未満のときの"元気_MAX超え" フレームに飛ぶ状態のままになってしまいます。 以下、いろいろ試したのですが・・・、 ・ダイナミックテキストで表示してみると、maxgoverの数値はちゃんと増えていました。 ・どこかに"MAX超え"に強制的に飛ばすようなスクリプトでも誤記入したかとも思い、9行目を"OH"に  変えてみたところ、そこではあっさり移動できました。 ・6,7行目の命令を4,5行目、MC内や、他の場所に移動して単品で記述しても動いてくれません。 ・試しに4行目を「_root.maxgenki += 34;」として、6行目を「maxgenki >= 100」と入れ替えても飛んで  くれません。 他にも、変数名を変えてみたり悪足掻きはしてみたのですが、まったくダメでした・・・ 誤表記などのポカミスであった可能性も、これだけ書き換えて一度も動いてくれないので薄いかと・・・ ムービー全体を見なければ答えは見つからないかもしれませんが、ここに記した範囲でどこかミスは ないでしょうか? どなたかご指導ください・・・ orz

  • MSX3
  • お礼率66% (2/3)
  • Flash
  • 回答数1
  • ありがとう数1

みんなの回答

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

何かよくわかりませんが,ここが変ですよ↓。 > 6          if(_root.maxgover >= 3){ > 7             gotoAndStop("元気_OH"); > 8          } > 9          gotoAndStop("元気_MAX超え"); もし _root の変数 maxgover が 3 以上である場合, "元気_OH" というフレームラベルの付いたフレームに進みますが, 問題なのはその後です。 > 9          gotoAndStop("元気_MAX超え"); これで, _root の変数 maxgover が 3 以上であってもなくても, "元気_MAX超え" というフレームラベルの付いたフレームに進みます。 つまり, > 6          if(_root.maxgover >= 3){ > 7             gotoAndStop("元気_OH"); > 8          } という分岐は無意味です。 ボタンをプレスしたときに, > 3       if(_root.genki >= 100){ という条件を満たしていれば, どんな状況でも gotoAndStop("元気_MAX超え"); が動作します。 ================ ◎条件1:マウスでボタンなどをプレスしたとき on(press){   ◎条件2:なおかつ, _root の変数 genki が 99 以上で   _root.genki >= 99     ◎条件3:なおかつ,_root の変数 genki が 100 以上で     _root.genki >= 100       ◎条件4:なおかつ,_root の変数 maxgover が 3 以上で       _root.maxgover >= 3         ↓元気_OH フレームに進む         gotoAndStop("元気_OH");     ◎条件3:_root の変数 genki が 100 以上であればどんな状況でも     ↓元気_MAX超え フレームに進む     gotoAndStop("元気_MAX超え");

MSX3
質問者

お礼

丁寧なご説明ありがとうございます(><) よくわからない内容で 申し訳ないです; その手の、命令文の優先順位などは正直手探りで進めているもので・・・ もう一度、アドバイスを参考にして組みなおしてみます。 一度、今あるon(press)命令の前にもうひとつon(press)を置いて、 "元気_OH"へのif~goto文を移動してみたんですが、やっぱりダメ だったんですけれど・・・ 二重にon(press)を置いたのがいけなかったんでしょうかね?^^; もう少し、色々試してみます。

関連するQ&A

  • setTimeoutでの制御に関しまして

    初めて質問をさせて頂きます。よろしくお願い致します。 「mc_Image1」、「mc_Image2」、「mc_Image3」という 各ムービークリップをストップボタンを押した際に時間差で停止させたいのですが 「mc_Image2」、「mc_Image3」がstopがかからない状態が稀に生じたりします。 (ムービークリップは全て、1フレーム目にstop();、10フレーム目にgotoAndPlay(2);と設定) 少し端折っておりますが、スクリプトを記載いたします。 ---------------------------- //何回ルーレットしたかカウントする var count:Number = 0; //スタート/ストップボタンが押された押されていないかのフラグ var flg_StartStop:Boolean = false; // mc_Image停止待機速度変数(ミリ秒) var hensu1 = 2000; var hensu2 = 3000; //スタート/ストップボタンを押した時に呼び出される関数 btn_StartStop.onPress = function() { if(flg_StartStop) { //選ばれたフレームに飛ぶ mc_Image1.gotoAndStop(parseInt(one)+1); // setInterval で hensu(ミリ秒)後に_root.gotoAndStop(); を実行 stopID = setInterval(function () { _root.mc_Image2.gotoAndStop(parseInt(two)+1); clearInterval(stopID); }, hensu); stop2ID = setInterval(function () { _root.mc_Image3.gotoAndStop(parseInt(three)+1); clearInterval(stop2ID); }, hensu2); //押されたかどうかの変数を「偽」に flg_StartStop = false; //カウンタを増やす count++; } else { //ムービークリップを走らせる mc_Image1.play(); mc_Image2.play(); mc_Image3.play(); //押されたかどうかの変数を「真」に flg_StartStop = true; } } ---------------------------- 。 きちんと「gotoAndStop();」させるにはどのように対処すれば よろしいでしょうか。 不足がございましたら申し訳ありません。 何卒よろしくお願い致します。

  • GOTOで思ったように飛ばない

    またもや来ました;; 今回は不思議な現象で困っています。 あちこちのフレームやシーンに飛ぶようになっているのですが 各フレームに来た時に変数「Basyo」へその時居たフレーム名を代入して内容を書き換えています。 あるタイミングになると決まったフレームに飛ぶ仕組みなのですが そのフレームに到達してある仕事を終えると 元に居たフレームへ戻るといったのが上手くいきません。 試しに、簡易プログラムを作ってみたら 思い通りに動くのですが、実際のプログラムでは 全く異なったフレームへジャンプします。 フレーム名や、変数の打ち間違いも確認したのですが 間違いを発見できません。 もしかしたら命令文に問題があるのでしょうか? ちなみに、納得できない現象が とんでもないフレームにジャンプするのは良しとして (良くないですが) そのジャンプ後のフレームで押せるはずのボタンが機能しません。 (これが恐らくなんらかの手がかりかと・・・) 命令文はこんな感じです。 フレーム1(フレーム名は「Hai」) basyo="Hai" あるきっかけで飛んだフレームでの命令 on (release) { gotoAndStop(basyo); } ちなみに、デバグ方法として一番上のレイヤーに ダイナミックテキストを配置し、basyoの中身が みえるようにしてましたら最終ジャンプする時まで basyoの中身はHaiになっているようでした。 上記、ご指導お願いします。

    • ベストアンサー
    • Flash
  • すべてのMCを1フレーム目へ

    ステージ上にMCのインスタンスが100個あるとします。 ボタンのクリックで全部のMCを1フレーム目へ移動させたいと思っています。 _root.EVENT_btn.onRelease = function() { _root.A_mc.gotoAndStop(1); _root.B_mc.gotoAndStop(1); _root.C_mc.gotoAndStop(1); _root.D_mc.gotoAndStop(1); : : } とひとつずつ書くしかないのでしょうか? ほかに効率のよい書き方はありますか? (注)すべてのインスタンスの親は同一オブジェクトではありません。

    • ベストアンサー
    • Flash
  • ボタンを押してもすぐ戻ってしまう・・・。

    1フレーム目に、 onEnterFrame = function():Void { if (_totalframes == _framesloaded) { gotoAndStop("snap"); } total = _root.getBytesTotal(); loaded = _root.getBytesLoaded(); percent = Math.floor(loaded/total*100); _root.bar_mc._xscale = percent; }; stop(); と記入し2フレーム目のフレームラベルをsnapに。 2フレーム目には、画像と次のフレームにいくボタンが置いてあります。 ボタンには、 on(press){ gotoAndStop(3); } と書いてあるのですが。 このボタンを押すと、確かに3フレーム目にいくのですが、すぐ2フレーム目に戻ってしまうんです。 初めてローディングバーをつけてみたので、間違いだらけかもしれないですがどうすればいいか教えてください><

    • ベストアンサー
    • Flash
  • 子ムービークリップの制御について

    flash初心者です。子ムービークリップの制御について教えてください Tシャツのシュミレーションがあるとします。 シャツ_mcに、1フレーム目「丸くび」、2フレーム目「Vネック」、のカタチで シャツ_mc.色_mcにマスクをかけています。 色_mcには1フレーム目「白」、2フレーム目に「赤」とします。 シャツ_mc.色_mcのそれぞれ1フレームにstop(); ボタン「丸くび_btn」「Vネック_btn」「白_btn」「赤_btn」の4つのボタンで それぞれ組み合わせを作りたいのですが 「丸くび_btn」に on (release) { _root.シャツ_mc.gotoAndStop(1); } 「Vネック_btn」に on (release) { _root.シャツ_mc.gotoAndStop(2); } 「白_btn」に on (release) { _root.シャツ_mc.色_mc.gotoAndStop(1); } 「赤_btn」に on (release) { _root.シャツ_mc.色_mc.gotoAndStop(2); } この場合「丸くび_btn」をクリックして「赤_btn」クリックで「丸くび赤シャツ」ができます ここまではいいのですが 赤の色を保持したまま「Vネック_btn」を押してVネック赤シャツのイメージも見たいのですが 色が白に戻戻ってしまいます。(色_mcの1フレーム目に戻る。) これをなんとかしたいのですが。 (色_mcが選ばれた状態で固定され勝手に移動しないようにしたい) アドバイスお願いいたします。

  • ムービークリップがマウスカーソルを追いかけ、マウスカーソルと同じ位置に来たときにムービークリップを変えたい

    以下のようにスクリプトを書いたのですが ムービークリップがマウスカーソルと同じ位置に来ても ムービークリップがフレーム2に移動しません。 ドラゴンクエストVIIIのトップページのFlashのような 表現をしたいのですがうまくいきません。 http://www.square-enix.co.jp/dragonquest/eight/ _mc.onEnterFrame = function() { this._x += ( _root._xmouse - this._x ) / 5; if( this._x == _root._xmouse ) this._mc.gotoAndStop(2); else this._mc.gotoAndStop(1); }; どうすればこの問題を解決することができるのでしょうか。 ご存知の方がおられましたらご回答をよろしくお願いします。

    • ベストアンサー
    • Flash
  • 【ActionScript】ムービークリップ間の変数の受け渡しのやり方は?

    ムービークリップ間の変数の受け渡しがいまいちわかりません。 例えば、 ・_root.mc1 及び、 ・_root.mc1.mc2 というインスタンスがあった場合、 _root.mc1.mc2 のフレームに a = 100; と書き、 _root.mc1 のフレームに trace(_root.mc1.mc2.a); と書いても「undifined」と出るだけです。 (上層の値を下層で受けることはできるんですが、この例のように下層→上層の受け渡しはできないのです。) どうすればインスタンス間の変数の受け渡しができるのでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • movie clipのインスタンス名を変数にし文字列+数字を代入し.g

    movie clipのインスタンス名を変数にし文字列+数字を代入し.gotoAndStopを行ったが動作しない。 Flash 初心者です。 「なぞ」にはまり込んでしまいました。よろしくお願いします。 作っているのは、 丸いボタンをクリックすると、下にある白い札の色が変わるインタラクションです。 丸いボタンは2個あり、四角の札も2個あります。 クリックするボタンに対応した札が色が変わり、その札以外は白になります。 初め次のようなアクションスクリプトを書いて、うまく動かすことができました。 var onMapButton_num = 0; onEnterFrame = function () {      if (onMapButton_num == 0) { spotName1_mc.gotoAndStop("white"); spotName2_mc.gotoAndStop("white"); } else if (onMapButton_num == 1) { spotName1_mc.gotoAndStop("orange"); spotName2_mc.gotoAndStop("white"); } else if (onMapButton_num == 2) { spotName1_mc.gotoAndStop("white"); spotName2_mc.gotoAndStop("orange"); } }; onMapButton1_mc.onRelease = function() { onMapButton_num = 1; }; onMapButton2_mc.onRelease = function() { onMapButton_num = 2; }; ボタンを増やしたいので、記述を短するために次のように変えてみました。 (spotNameという変数を作りました) var onMapButton_num = 0; onEnterFrame = function () { var spotName = "spotName" + onMapButton_num + "_mc"; /* spotName */ if (onMapButton_num == 0) { spotName1_mc.gotoAndStop("white"); spotName2_mc.gotoAndStop("white"); } else if (onMapButton_num == 1) { spotName.gotoAndStop("orange"); /* spotName の使用*/ spotName2_mc.gotoAndStop("white"); } else if (onMapButton_num == 2) { spotName.gotoAndStop("white"); /* spotName の使用*/ spotName2_mc.gotoAndStop("orange"); } }; onMapButton1_mc.onRelease = function() { onMapButton_num = 1; }; onMapButton2_mc.onRelease = function() { onMapButton_num = 2; }; 結果、1つめのボタンをクリックしても、札の色が変わらなくなりました。 変数の使い方に問題があるのでしょうか? よろしくお願いします!

    • ベストアンサー
    • Flash
  • 条件式の中に入れるとムービークリップが動作しない。

    条件式の中に入れるとムービークリップが動作しない。 またまた、悩みにはまってしまいました。 初期状態で、ボタンのムービークリップを全て、ラベルreadyの静止画像に設定し、 クリックされたときに、そのボタンのラベルhitに移動して、 そこに設定されたムービークリップの動作をさせようとしています。 以下のようなアクションスプリクトを書きましたが、 hitに移動するものの、hitに設定したムービークリップの、 1フレーム目の静止画像しか表示されません。 試しに6行目の_root[buttonName].gotoAndStop("ready"); のreadyをhitに変えると、hitラベルのムービークリップが動作します。 原因は何なのでしょうか??? ////////////////////////////////////////////////////////// var onMapButton_num = 0; onEnterFrame = function () { var buttonName = "onMapButton" + onMapButton_num + "_mc"; for ( var i:Number = 1; i < 6; i++) { // 初期設定 buttonName = "onMapButton" + i + "_mc"; _root[buttonName].gotoAndStop("ready"); //ボタンをすべて ready に } for ( var i:Number = 1; i < 6; i++) { // アクション if ( onMapButton_num== i ) { // ボタンが押された場合 buttonName = "onMapButton" + i + "_mc"; _root[buttonName].gotoAndStop("hit");     // ヒットしたボタンを hit に } } }; // ボタン(1~5)のアクションと 番号の取得 ////////////////////////////////// onMapButton1_mc.onRelease = function() { onMapButton_num = 1; }; onMapButton2_mc.onRelease = function() { onMapButton_num = 2; }; onMapButton3_mc.onRelease = function() { onMapButton_num = 3; }; onMapButton4_mc.onRelease = function() { onMapButton_num = 4; }; onMapButton5_mc.onRelease = function() { onMapButton_num = 5; }; stop();

  • 配列演算子を使って変数を使いたい

    いつも、ありがとうございます。MAC OSX Flash8です。 ランダムで作った変数でムービークリップのタイムラインを使って複数のmcを複数の位置にランダムに配置しようとしています。 この時に、変数を使って階層の中のmcのインスタンス名にgo toを渡したいのですがうまくいきません。配列演算子の使い方がまだよくわかっていないためだと思います。スクリプトは以下のようです。 _root.shuffle.gotoAndStop(sfl[tim]) if (tim == 1) { _root.shuffle.shuffle+sfl[1].shiro+ichi[1].gotoAndStop(1) _root.shuffle.shuffle+sfl[1].shiro+ichi[2].gotoAndStop(nise[1]) _root.shuffle.shuffle+sfl[1].shiro+ichi[3].gotoAndStop(nise[2]) } 3種類のランダムで作った変数は、sfl[1] ichi[1] nise[1] です。 nise[1]はこのままで使えるようでした。たとえばshuffle1の1にsfl[1]をshiro1の1にichi[1]をあててランダムでできている数字を入れたいのですがどうしたらいいのでしょうか? よろしく、お願いします。

    • ベストアンサー
    • Flash

専門家に質問してみよう