• ベストアンサー

ゲーム ボタンの順番

脱出ゲームに良くあるパスコードのボタンを作りたいのですが たとえば[a][b][c][d]のボタンがあってパスの順番がb.c.c.d.aという、同じボタンが重なったりするパス装置です、それでパスが合っていれば次のステージみたいな感じにしたく、色々とやってみたのですが上手くいきません。 素人でも簡単に書けるASがあれば教えてください。

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

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

> 同じボタンが重なったりするパス装置です、 この表現がいまひとつわかりませんが, 要は 「文字列加算」 した結果を 「合否判定」 するのでしょう? [a][b][c][d]のボタンが存在する _root などのフレームに, ActionScript で,まず文字列が空のパスコードを用意しておきます。 -------------------------- // 変数 passcode の初期化 passcode = ""; -------------------------- [a]のボタン(ボタンインスタンス)には次のように書きます。 -------------------------- // このボタンをクリックしたとき on (release) { // 変数 passcode に文字 a を加算 passcode += "a"; } -------------------------- [b]のボタン(ボタンインスタンス)には次のように書きます。 -------------------------- // このボタンをクリックしたとき on (release) { // 変数 passcode に文字 b を加算 passcode += "b"; } -------------------------- [c]のボタン(ボタンインスタンス)には次のように書きます。 -------------------------- // このボタンをクリックしたとき on (release) { // 変数 passcode に文字 c を加算 passcode += "c"; } -------------------------- [d]のボタン(ボタンインスタンス)には次のように書きます。 -------------------------- // このボタンをクリックしたとき on (release) { // 変数 passcode に文字 d を加算 passcode += "d"; } -------------------------- これをいつどういうタイミングで判定するのか知りませんが, 仮に「判定」ボタンを作成するなら, そのボタン(ボタンインスタンス)に次のように書きます。 --------------------------------------- // このボタンをクリックしたとき on (release) { // もし passcode の値が bccda であれば if (passcode == "bccda") { // ↓実際は gotoAndPlay など別のことを書く trace("正解!"); } // passcode の値をクリア(初期化)する passcode = ""; } --------------------------------------- trace() はムービープレビュー時に動くスクリプトです。 上の状態で,「制御」→「ムービープレビュー」して, [a] [b] [c] [d] と [判定] の5つのボタンを  [b]→[c]→[c]→[d]→[a]→そして→[判定] の順でクリックすると, 変数 passcode の値は,  "" ←クリックする前  "b" ←[b]クリック時  "bc" ←[c]クリック時  "bcc" ←[c]クリック時  "bccd" ←[d]クリック時  "bccda" ←[a]クリック時    [判定]    もし passcode が "bccda" であれば    「正解!」を出力  "" ←[判定]クリック後 となりますから,「正解!」 が trace(出力)されます。 つまり, passcode が "bccda" であるなら, trace 以外の何かをすることもできます。 [a][b][c][d]がボタンでなくムービークリップの場合や, [a][b][c][d]はボタンであるけど別々のムービークリップに入っているような場合は, ターゲットパスに注意してください。 もし _root(シーン1 などメインムービーのタイムライン)に, 最初のスクリプト, ----------------------------- // 変数 passcode の初期化 passcode = ""; ----------------------------- これを書いた場合, ボタン(ムービークリップ)に書くスクリプトは, 次のように変数へのパス _root を入れておいた方が無難かもしれません。 [a]~[d]の代表として [a]のボタン(ムービークリップでも可)に書くスクリプト ---------------------------------- // このボタンをクリックしたとき on (release) { // _root の変数 passcode に文字 a を加算 _root.passcode += "a"; } ---------------------------------- [判定]ボタン(ムービークリップでも可)のスクリプト ------------------------------------------- // このボタンをクリックしたとき on (release) { // もし _root の passcode の値が bccda であれば if (_root.passcode == "bccda") { // ↓実際は gotoAndPlay など別のことを書く trace("正解!"); } // _root の passcode の値をクリア(初期化)する _root.passcode = ""; } ------------------------------------------- Flash のバージョンなどを書かれていらっしゃいませんので, Flash 5以上(Flash5,MX,MX2004,8,CS3) で作成可能なスクリプトにしました。 ActionScriptのバージョンは 1.0 です。 ※ただし,ボタンではなく,   ムービークリップに on (release) を書く場合は,   FlashMX以上である必要があります。 ※ActionScript3.0 では   on (release) をとごに書こうとも動作しません。   (そもそも他のスクリプトであっても   ボタンやムービークリップ自体には書けません。)

kennbou8u
質問者

お礼

ありがとうございます。 大変分かりやすい説明ですぐに作ることが出来ました。

関連するQ&A

専門家に質問してみよう