• ベストアンサー

FlashLite1.1でのランダム表示について

携帯Flashで下記のようなゲームを作成しようと思っています。 http://teto5527.tsukaeru.jp/nouryoku/NOU010104.htm ・数字MCを配置 ・ランダムで表示 ・1種類だけ同じ数字が2つある ・正解・不正解の判定 ・次の問題へ の一連の流れをどう作っていけば良いか分からず困っています。 当方、FlashLite1.1のactionscriptは多少理解しているつもりです。 ご教授頂けると幸いです。 よろしくお願いします。

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

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

#1 です。 すみません。 見落としていたわけではないのですが, > ・数字MCを配置 と書かれていらっしゃる条件を取りまちがえていたかもしれません。 この「数字MCを配置」の意味は, ひょっとして 「画像でできた数字を表示」 という意味でしょうか? それだと MC が出てくる意味もわかります。 MCの中に画像を入れて切り替えるという意味になりますね。 また,#1 では, 1,2,3,4,5,6,7,8,9 の9個の数をランダムに入れ替えたものに 後からランダムな数を挿入するという流れのプログラムを書いています。  6,9,3,8,5,2,7,1,4     ↑     ○=ランダムな数(どこかに挿入) しかし,最初から, 1,2,3,4,5,6,7,8,9,○=ランダムな数 の10個の数を用意して,それをランダムに入れ替えた方が早かったですね...。 そこの部分の修正も加えて回答し直します。 修正すると言っても,ムービー全体の構造はそのままです。 2フレーム2レイヤーで, 1つのレイヤーにはコンテンツ 1つのレイヤーにはActionScript ActionScriptのレイヤーはフレーム1と2にキーフレームを入れておく。 ここまでは#1と変わりません。 インスタンスは変えます。 まず「disp」という変数名を付けたダイナミックテキストを削除します。 それでその代わりに, 1~9 までの数字画像を それぞれ1~9フレームに配置したムービークリップを用意します。 【下の図】↓ の上側半分。 このムービークリップのフレームを指定フレームに gotoAndStop() させれば良いわけです。 _root の編集に戻って, 上で作ったムービークリップを 元「disp」という変数名を付けたダイナミックテキストがあった部分に 10個横並びで並べます。 そして,左から順に 「dsp_mc1」,「dsp_mc2」,「dsp_mc3」,…,「dsp_mc10」 という "インスタンス名" を付けます。 【下の図】↓ の下側半分。 ここまでで構造は次のようになります。  _root(メインのタイムライン)    ├dsp_mc1(1~9の画像入りMC)    ├dsp_mc2( 〃 )    ├dsp_mc3( 〃 )    ├dsp_mc4( 〃 )    ├dsp_mc5( 〃 )    ├dsp_mc6( 〃 )    ├dsp_mc7( 〃 )    ├dsp_mc8( 〃 )    ├dsp_mc9( 〃 )    ├dsp_mc10( 〃 )    ├ダイナミックテキスト 変数名:point    └ボタン(透明にしておいても良い) あとは ActionScript用の2フレームと,ボタンにスクリプトを書いて行きます。 一応全部書きますが,変えたのは フレーム1 のスクリプトのみです。 ◎ フレーム1 のキーフレームに書くスクリプト↓(短くなった) --------------------------------------------- // 再生停止 stop(); // 変数 num1~num9 に 1~9 の数を代入 for (i=1; i<=9; i++) { eval("num" add i) = i; } // 1~9までのランダムな数を my_num に取得 my_num = random(9)+1; // 変数 num10 に my_num の値を代入 num10 = my_num; // ランダムシャッフル用ループ for (i=1; i<=10; i++) { // 1 以上 (10-i)+1未満の整数の乱数を取得 r = random(10-i)+1; // num[10+1-i] の値と num[r] の値とを入れ替える tmp = eval("num" add (10+1-i)); eval("num" add (10+1-i)) = eval("num" add r); eval("num" add r) = tmp; } // dsp_mc1~10 を フレーム num1~10 に進めて停止 for (i=1; i<=10; i++) { tellTarget ("dsp_mc" add i) { gotoAndStop(eval("/:num" add /:i)); } } // 変数 point が空白文字列であれば実行 if (point eq "") { //変数 point に 0 を代入 point = 0; } --------------------------------------------- ◎ フレーム2 のキーフレームに書くスクリプト↓(変更ナシ) --------------------------------------------- // もし my_num の値が btn_num の値と等しいとき if (my_num == btn_num) { // 変数 point の値に 5 を加算 point += 5; // my_num の値が btn_num と等しくなければ } else { // 変数 point の値から 5 を減算 point -= 5; } // フレーム1 に書いたスクリプトを実行 call(1); --------------------------------------------- ◎ ボタン に書くスクリプト↓(変更ナシ) --------------------------------------- on (keyPress "1") { // 変数 btn_num に 1 を代入 btn_num = 1; // フレーム2 に書いたスクリプトを実行 call(2); } on (keyPress "2") { btn_num = 2; call(2); } on (keyPress "3") { btn_num = 3; call(2); } on (keyPress "4") { btn_num = 4; call(2); } on (keyPress "5") { btn_num = 5; call(2); } on (keyPress "6") { btn_num = 6; call(2); } on (keyPress "7") { btn_num = 7; call(2); } on (keyPress "8") { btn_num = 8; call(2); } on (keyPress "9") { btn_num = 9; call(2); } ------------------------------------- 作成は以上です。 上で, > そして,左から順に > 「dsp_mc1」,「dsp_mc2」,「dsp_mc3」,…,「dsp_mc10」 > という "インスタンス名" を付けます。 ということを書きましたが, これは説明の都合上そうするだけで, インスタンス名の付け忘れや重複がなければ,どこにMCを配置しても良いわけですから, #1の方法より,この方法の方が面白いレイアウトなどできて良いような気がします。 例えば輪に並べるとか,場合によっては例えば波のように動かすとか。 その他の補足説明は,すみませんが #1 の補足を見てください。 同じです。

ihsotufeba
質問者

お礼

できました。 scriptや参考画像など、ご丁寧な回答どうもありがとうございました。 非常に参考になりました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

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

===○作成前のメモ======================== ・1~9で重複のないランダムな9桁の文字列を作成 ・ランダムな位置にランダムな1~9の数(文字)を挿入 ・キーを押す→正解で得点 +5 不正解で得点 -5        →同時に次の問題を出題 ======================================= だいたい上のメモの内容のようなものを作成することにします。 【下の図】↓ のように, ステージ上に , 「disp」 という "変数名" を付けたダイナミックテキスト と 「point」 という "変数名" を付けたダイナミックテキスト と ボタン (透明にしておいても良い)を用意し, ムービーのフレームを 2フレーム にします。 そして, ActionScript用にするレイヤーを追加し, ActionScript用にするレイヤーの フレーム2 を空白キーフレームにします。 ◎ フレーム1 のキーフレームに書くスクリプト↓ --------------------------------------------- // 再生停止 stop(); // 変数 num1~num9 に 1~9 の数を代入 for (i=1; i<=9; i++) { eval("num" add i) = i; } // ランダムシャッフル用ループ for (i=1; i<=9; i++) { // 1 以上 (9-i)+1未満の整数の乱数を取得 r = random(9-i)+1; // num[9+1-i] の値と num[r] の値とを入れ替える tmp = eval("num" add (9+1-i)); eval("num" add (9+1-i)) = eval("num" add r); eval("num" add r) = tmp; } // 表示用変数 disp の初期化 disp = ""; // disp に9個の数を連結 for (i=1; i<=9; i++) { disp = disp add eval("num" add i); } // 1~9までのランダムな数を my_num に取得 my_num = random(9)+1; // 0~9までのランダムな数を pos に取得 pos = random(9+1); //disp の pos の位置に my_num を挿入(※↓改行ナシの1行) disp = substring(disp, 0, pos) add my_num add substring(disp, pos+1, 9-pos); // 変数 point が空白文字列であれば実行 if (point eq "") { //変数 point に 0 を代入 point = 0; } --------------------------------------------- ◎ フレーム2 のキーフレームに書くスクリプト↓ --------------------------------------------- // もし my_num の値が btn_num の値と等しいとき if (my_num == btn_num) { // 変数 point の値に 5 を加算 point += 5; // my_num の値が btn_num と等しくなければ } else { // 変数 point の値から 5 を減算 point -= 5; } // フレーム1 に書いたスクリプトを実行 call(1); --------------------------------------------- ◎ ボタン に書くスクリプト↓ --------------------------------------- on (keyPress "1") { // 変数 btn_num に 1 を代入 btn_num = 1; // フレーム2 に書いたスクリプトを実行 call(2); } on (keyPress "2") { btn_num = 2; call(2); } on (keyPress "3") { btn_num = 3; call(2); } on (keyPress "4") { btn_num = 4; call(2); } on (keyPress "5") { btn_num = 5; call(2); } on (keyPress "6") { btn_num = 6; call(2); } on (keyPress "7") { btn_num = 7; call(2); } on (keyPress "8") { btn_num = 8; call(2); } on (keyPress "9") { btn_num = 9; call(2); } ------------------------------------- 作成は以上です。 以下は補足です。 上のものだと,ゲームの開始は自動開始です。 作りたいものに応じて考えてみてください。 例えば フレーム1 にルール説明などを置いておいて, 上の フレーム1 と フレーム2 に用意した全てを フレーム2 と フレーム3 にズラして用意するとかです。 ※ちなみに書かれていらっしゃるページ↓で,  http://teto5527.tsukaeru.jp/nouryoku/NOU010104.htm  最初に スタートボタン を用意してある理由は  おそらくFlash にフォーカスを与えるためです。  PCのブラウザ でページを見た場合,  Flash にフォーカスなど当たっていませんから,  1~9 のキーを押される前に  Flash にフォーカスを与える必要があります。  そのためにあるもので  ゲーム上,本来は必要ないはずのボタンです。 また上のものだと, いつまで経ってもゲームは終了しません。 この辺も作りたいものに応じて考えてみてください。 一応,ゲーム終了のために フレーム1 と フレーム2 にスクリプトを分けて書いています。 フレーム2 のスクリプトで得点(point)を計算した後, 普通は次の問題を出題するので最終行で  // フレーム1 に書いたスクリプトを実行  call(1); をしています。 しかし例えば得点(point)が 100 になったら call(1); をするのではなくて gotoAndStop(3); などをして,「おめでとう」フレームに進めることもできますよね。 そういうことをするためにスクリプトを フレーム1 と 2 とに分けています。 ランダムシャッフルで 私が 参考にしたページ↓ 「FN0212003 - 配列を偏りなくランダムに並替える」 http://fumiononaka.com/TechNotes/Flash/FN0212003.html

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • flashliteでランダム(シャッフル)を作りたい。

    いつもお世話になります。今回ご質問させて頂く内容はFlashlite1.0で、1~10までの数字をランダムかつ同じ数字がかぶらないように表示する方法(シャッフル)です。Flashlite2.0からは配列が使え、考えればシャッフルする方法もあったのですが、1.0ですと配列が使えない為やり方がわかりません。FlashのASは経験あるのですが、Flashliteの知識や経験があまりなく困っております。どなたかお教え頂けたらと思います。 具体的な内容なのですが、今作ったスクリプトが以下です。iという文字にsetを使い擬似配列(?)を組みarray0~array9という変数をランダムな数字で表すといったスクリプトを組んだのですが、これだとランダムなので同じ数字が何回も出てきてしまいます。これを同じ数字は省いてダブる数字が無いようにしたいと思っています。 ▼スクリプト▼ num = 10; for(i = 0;i < num;i++){ set("array" add i,random(10)); } // 確認用 trace(array0); trace(array1); trace(array2); trace(array3); trace(array4); trace(array5); trace(array6); trace(array7); trace(array8); trace(array9); お手数お掛けして申し訳ありません。どなたかお教え頂ける方がいらっしゃいましたらよろしく御願い致します。 制作環境はAdobe Flash CS3です。

    • ベストアンサー
    • Flash
  • FlashLiteで半円のアナログ時計を作りたい

    FlashLite1.1で、文字盤が円を丁度縦に割った形のものを 制作したいのですが、時間の針のスクリプトが上手くいきません。 どなたかご教授宜しくお願い致します。 ・左半弧に数字を配置し、上から左回りに秒針をすすめたいです。 ・MX2004で制作しています。 あまりActionScriptが得意でありませんので、差し支えなければ 解説もつけて頂けると本当に助かります。 どうかよろしくお願いします!

  • ランダム表示かつ重複しない

    現在flashでクイズを作っています。 一回スタートさせれば問題はランダムに5問でます。 正解し続ければ5問でクリア。 間違えれば終了です。 そこでクイズに使う背景をランダム表示かつ、重複しないものにしたいと思っていますがうまくいきません。 dummy_mcを作ってそこに 現在背景用の1~10swfファイルをランダム表示させています。 ただこれだと同じ背景が続けてでてきたりしてしまいます。 これを一回のゲームで背景が重複しないで表示させたいと思っています。 アニメーション、フレーム移動などは理解していますが scriptになると正直わからないことだらけです。 現在勉強中でscriptはコピペしながら改造している状態です。 解決法をわかるかたがいらっしゃったらよろしくお願い致します。

  • Flash cs4 ランダム再生

    Flash初心者です。 やりたいことはホームページ上でアニメーションを再生させる際に、複数パターンのアニメーションをページをリロードするたびにランダムに切り替えるということです。 Flashにてアニメーションのタイムラインを複数パターンつくり、ランダム再生をActionScriptで制御するものを作成したいと思います。 アニメーションのタイムラインを作成しムービーシンボルとしたものを複数作成し、それをシーン1のタイムラインにて各フレームに配置して、1フレーム目にActionScriptにてgotoAndStop(ランダムフレームの記述?);とすればいいのかなと思っているのですが、正しいでしょうか? 現状ではアニメーションのムービーシンボルは必要なパターンだけ作成しました。 シーン1のタイムラインに配置まではしたのですが、ActionScriptの記述が素人なものでさっぱりわかりません。 どなたか教えていただけませんか? 自分なりにやってみたのですが、ランダム関数(?)以前にgotoAndStop()すら思うようにいきませんでした。 Flashはcs4を使用しております。ActionScript3.0のプロジェクトにして添付画像のように1フレーム目に gotoAndStop(10); としてみたのですが、パブリッシュしたswf ファイルは真っ白のまま何も動いてくれません。 gotoAndstop(10); としてみたらstopせずにタイムラインを再生しているようで、各アニメーションの最初のフレームだけが切り替わるものになってしまいました。 ともにコンパイルエラー 1180:未定義である可能性が高いメソッドgotoAndstopの呼び出しです といわれます。 ActionScriptが2.0と3.0とどちらがいいのかもわかってない状態ですが、ご教授願います。

    • ベストアンサー
    • Flash
  • ランダムに画像ファイルを選出するには?

    Flash初心者です。 下記の例を実現する方法を教えていただけないでしょうか。 例) Aというフォルダに10000枚の画像ファイルがあるとします。 Aからランダムに画像を選び、ムービークリップ(以下MC)に読み込ませて表示し、任意の秒数で画像が切り替わっていくビューワーを作成するとして、"ランダムに画像をMCに読み込ませる(ただし、一度読み込んだものは二度は読み込まない)"にはどのようなやり方があるのでしょうか。 簡易かつ動作が軽いActionScriptの記述法を教えていただけると助かります。 よろしくお願いします!

  • ランダム表示を重複させないようにするには

    はじめまして。 現在flashでクイズを作っています。 一回スタートさせれば問題はランダムに5問でます。 正解し続ければ5問でクリア。 間違えれば終了です。 そこでクイズに使う背景を重複しないものにしたいと思っていますがうまくいきません。 dummy_mcを作ってそこに 現在背景用の1~10swfファイルをランダム表示させています。 ただこれだと同じ背景が続けてでてきたりしてしまいます。 これを一回のゲームで背景が重複しないで表示させたいと思っています。 アニメーション、フレーム移動などは理解していますが scriptになると正直わからないことだらけです。 現在勉強中でscriptはコピペしながら改造している状態です。 解決法をわかるかたがいらっしゃったらよろしくお願い致します。

    • ベストアンサー
    • Flash
  • Flashでムービークリップのランダム表示

    ActionScript初心者で過去ログを探してみたりもしたのですが、(探し方自体がヘタなのかもしれませんが(^_^;)・・・)わからなかったもので。 下記のFlashムービーで画面右半分に表示されている減速&加速して画面上を流れる球体のようなムービーを制作する場合。 http://www.kips-ps.com/main/ 例えば10数種類程度の下から上へと流れる、フレーム数の異なるモーショントゥイーンを含むムービークリップを作成して、それぞれをレイヤーに配置するーというような作業だけでできるのでしょうか? それともActionScriptからMCの表示・動作を制御したりしないと、それっぽく見えないものなのでしょうか? 質問そのものが拙い内容であるようにも思うのですが、よろしくお願いいたします。

  • ブラウザ取得毎にMCをランダム再生させる方法

    はじめまして。flash初心者のものです。 ブラウザを再取得する度に、再生されるMCが変わる(ランダム再生)様なバナーを作成したいです。考えている方法としては、『1つのswfの中に10個のMCを入れて、それぞれをランダムで再生させる』という事で良いと思っています。10個の外部swfファイルをランダムに読み込ませる方法は色々参考資料があるのですが、サーバーの都合で出来れば1つのswfファイルの中に収めたいのです。 現在、1つのswfファイルの中に、clip1~clip10まで作成してあり、それぞれ200フレームの長さのMCになっています。それぞれclip単体では正常に動作しているので、あとはこれをランダムに再生させたいのですが、どういったActionScriptにしたら良いのでしょうか。 ソフトは『FREE MOTION』 バージョンは『Flash Player 7』になってます。

  • flashのランダム再生

    flash8で質問です。 5つのswfをランダムに読み込み、 5番目までいったらまた、ランダムにはじめから再生したいです。 ランダムで5つまで再生終わったらはじめからループという考え方でいいのでしょうか? ***************************** 外部にswfが5つおいてあります。 (外部ムービーの名前は1.swf、2.swfのように数字の番号の名前ではありません。) ///main.fla/// 配列にして (1.swf、2.swf、3.swf、4.swf、5.swf)をランダムで取り出し、 .load_mcに読み込む。 ランダムに1~5までのムービーの再生が終わったらまた ランダム再生を繰り返す。 というようなflashを作りたいです。 どうすればいいでしょうか。

    • ベストアンサー
    • Flash
  • FlashLite1.1 の当たり判定

    こんにちは。はじめて書き込みさせていただいてます。 FlashLite1.1で回っている観覧車の12個あるゴンドラの1つを当たりの位置に止めるとイベントが発生するフラッシュを作りたいのですが、FlashLite1.1の当たり判定の仕方で四苦八苦しています。 プログラムは苦手で、いろいろなサイトや本を見ながら試行錯誤中です。 今、マップゲーの仕組みを応用できないかなと思ってやってみてますが、なかなか正解にたどり着きません。。。 mdの値が1の場所に当たりゴンドラを止めたらイベントが起きるようにしたいので、当たりゴンドラが止まった位置のmdの数値をうけとってif文で当たりかハズレかを分岐させたいと思うのですが、考え方は合ってますでしょうか? この方法が理解できたら、プログラムが苦手な私にもいろいろ応用の幅が広がりそうかなと思っていて、なんとか習得したいと思います。 ぼんやりとした質問ですみません。。よろしくお願いします! //マップの当たりデーター md = "0000000000000000" add"0000000000000000" add"0000000000000000" add"0000000000000000" add"0000000000000000" add"0000000000000000" add"0000000000000000" add"0000000000000000" add"0000000000000000" add"0000000000000000" add"0000000000000000" add"0000000000000000" add"0000000000000000" add"0000000000000000" add"0000001100000000" add"0000001100000000" add"0000000000000000" add"0000000000000000" add"0000000000000000" add"0000000000000000" add"0000000000000000";