- ベストアンサー
ボタンの有効と無効
- ボタンの有効と無効について初心者向けに解説します。ボタンの使い方や制御方法について詳しく説明します。
- ボタンの有効と無効を制御する方法をご教授します。初心者でも簡単に実装できるので安心です。
- ボタンの使い方や有効無効の制御方法について解説します。初心者にもわかりやすく説明します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
AS2.0 からだけでは判断しかねますが, おそらく Flash Player 7 以降用の SWF をパブリッシュしようとされているのではないかと思います。 その場合,書かれていらっしゃる if文 の後にでも trace(a+b); を付け加えて,「制御」→「ムービープレビュー」してみると原因が見えると思うのですが。 Flash Player 7 以降用の SWF をパブリッシュする場合, 初期値を設定していない変数の値は undefined なんです。 0 ではなく undefined です。 あえて無理矢理,数値的な計算しようとすると NaN(非数!) となります。 次のようにして変数 a と b の初期化をすべきでしょう。 -------------------- //↓要/不要 は場合による stop(); //もし変数 a が未定義であれば if (a == undefined) { // 変数 a に 0 を代入 a = 0; } //もし変数 b が未定義であれば if (b == undefined) { //変数 b に 0 を代入 b = 0; } btnA.onRelease = function() { gotoAndStop("pageA");//ページAへジャンプ a = 1; }; btnB.onRelease = function() { gotoAndStop("pageB");//ページBへジャンプ b = 1; }; btnC.onRelease = function() { gotoAndStop("pageC");//ページCへジャンプ }; btnD.onRelease = function() { gotoAndStop("pageD");//ページDへジャンプ }; //もし a+bが0 または a+bが1 であれば if (0 == a+b || 1 == a+b ) { btnC.enabled = false; btnD.enabled = false; } else if (2 == a+b) { btnC.enabled = true; btnD.enabled = true; } //(↓ムービープレビュー時の検証用) trace(a+b); -------------------- ※ActionScript 1.0 (パブリッシュ設定は 2.0 でも可) ※Flash MX 2004 以上を前提として書きましたが Flash MX 以上でも使用可 ※Flash Player 7 以上を前提として書きましたが Flash Player 6 以上でも動作可 もし Topページ が フレーム2 以降でしたら 例えば フレーム1 で a = 0; などを実行しておけば良いだけで //もし変数 a が未定義であれば if (a == undefined) { //変数 a に 0 を代入 a = 0; } こんな妙なものは登場させなくて良いのです。 しかし Topページ がもし フレーム1 から始まっていれば, a = 0; だと Topページ に戻る度に a が 0 に戻ってしまいます。 それで if(a==undefined){… というものを登場させています。 もしくは上記の妙な if文 は消して 最後の if文 を次のように変更するのも1つの方法です。 //もし a+b が 2 でない限り if (2 != a+b) { btnC.enabled = false; btnD.enabled = false; } とにかく trace() でしっかり値を把握してください。
お礼
できました! ABE各ページの戻りボタンのアクションスクリプトに var a:String = ""; a = 1; var b:String = ""; b = 1; var e:String = ""; e = 1; を追加して、 大元のアクションアクションスクリプトには、 trace(a + b + e); if(3 > a + b + e){ btnc.enabled = false; btnd.enabled = false; }else if (3 == a + b + e){ btnc.enabled = true; btnd.enabled = true; } に書いたら trace(a + b + e);の出力もちゃんと出力されました。 0 1 2 3 今までできなかった理由としては、ページBとページEの戻るボタンを押すと1が十進数の状態で出力されるべきなのに、二進数の状態で出力されたせいだと私は思います。 なぜ、ページAの戻るボタンを押したらちゃんと1が出力されるのに、ページBとページEの戻りボタンを押すと 10と11が出力されるかはわかりません。まったく同じ(パターン)ようにソースを書きましたが、、 もっと、勉強したいと思います。 BlurFiltan様、参考になるご回答ありがとうございました。 これからもよろしくお願いします。
補足
BlurFiltan様ご回答ありがとうございます! 回答してくれた通りやりましたら、以下のように出力されました。 0 ← 最初から 1 ← btnAを押下すると 0 ← ページAの戻りボタンでTopページへ戻ると 1 ← btnBを押下すると 0 ← ページBの戻りボタンでTopページへ戻ると 結果的に、思う通りにできませんでした。 そこで、ページAとページBの戻りボタンに各a = 1;とb = 1;を追加したら思うとおりにできました。ムービープレビューの結果も以下のとおりです。 0 ← 最初から 1 ← btnAを押下すると 1 ← ページAの戻りボタンでTopページへ戻ると 1 ← btnBを押下 2 ← ページBの戻りボタンでTopページへ戻る ご教授頂きたい事。 ボタンAとBを押すときのa = 1;とb = 1;はあんまり意味ないのではと思って、実際a = 1;とb = 1;を削除をして見ましたが、同じく 0 1※ 1 1※ 2 が出力されました。(あれ?) ※a = 1;とb = 1;を削除したので、0,0のはず?なのに、、、 なぜでしょうか? ************************ もう一つご教授頂きたい事があります。 ボタンEとページEをもうひと組を追加したら、なぜか変に出力され、また結果が思う通りにもできません。(不思議です。) 以下ソースを追加、修正しました。 ●追加 //もし変数 E が未定義であれば if (e == undefined) { //変数 e に 0 を代入 e = 0; } ●追加 btnE.onRelease = function() { gotoAndStop("pageE");//ページEへジャンプ e = 1; }; ●修正 //もし a+b+eが0 または a+b+eが2 であれば if (0 == a+b+e || 2 == a+b+e) { btnC.enabled = false; btnD.enabled = false; } else if (3 == a+b+e) { btnC.enabled = true; btnD.enabled = true; } ●修正 //(↓ムービープレビュー時の検証用) trace(a+b+e); ●追加 そして、ページEの戻りボタンに e =1;を追加。 出力は以下の通りです。 00 ←最初から (0のはずでは?)※ 1 ←ボタンAを押下すると 1 ←ページAの戻りボタンでTopページへ戻ると (この時点で、ボタンCとDがなぜか true になります。)※ 1 ←ボタンBを押下すると 2 ←ページBの戻りボタンでTopページへ戻ると (この時点で、ボタンCとボタンDは false になります。) 1 ←ボタンEを押下すると 3 ←ページEの戻りボタンでTopページへ戻ると (この時点で、ボタンCとボタンDは trueになります。) ※<-この記号のところをご教授頂きたいですが、、 なぜ、最初 trace(a+b+e); は00、 なぜ、ページAから戻ったところで、ボタンCとDがfalseはずなのに、trueでしょうか? 初心者の自分にとしては本当に不思議です。 なにぶんにも初心者ですので詳しく教えて頂けると有り難いです。 説明不足で解りにくいと思いますが、宜しくお願い致します。