- ベストアンサー
FLASHでビンゴを作成するアクションスクリプトを教えて下さい。
4年ぶりにFLASHを作らざるを得ない状況に追い込まれていますが 抽選用のアクションスクリプトなんて組んだ事がありません。 BINGO用とのことで、履歴も表示せにゃならないようですが…… アクションスクリプトの組み方を教えて下さい。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ActionScript の組み方と書かれましても, バージョンだけを考えても ActionScript1.0~3.0 までバージョンがあります。 またさらに, 各Flash作成ソフトのバージョンによっても使えるスクリプト使えないスクリプトが様々ですから, それに応じて組み方も変わりますし,ムービーの構造も変わります。 今が2008年10月ですから,4年前となると,2004年10月ですね。 私のメモによりますと, FlashMX2004日本語版 の発売が 2004年12月5日 ですから,4年前にはまだ出ていません。 したがって, その先代の FlashMX(2002年3月29日発売)以上で使える範囲内のActionScript1.0 でよろしいでしょうか。 (発売日や定価などの情報も回答に関係する場合があるのでデータはメモしてあります。) ビンゴの数字となると普通のランダムではなく, 同じ数字が重複して出ないランダムな数でなくてはなりません。 これには, 配列内の要素に出すべき全データを用意して, その配列内の要素をシャッフルして, シャッフルした要素を順に取りだす。 という方法を使うのが一般的です(他にも方法はありますが)。 喩えるなら, 1~12までのトランプカードを用意して, それらのカードを無茶苦茶にシャッフルして, 並べかえたカードを上から1枚ずつ取る。 というようなイメージです。 これだと,12枚目のカードを取るまで, ランダムな数のカードが重複なく出ますよね。 つまり, 数字を出す度にランダムを考えるのではなくて, 先にランダムは用意しておくということです。 先に用意しておいてもそれを一気に見せなければ良いだけです。 よろしければ, ステージサイズ横500×縦300くらい(その辺で適当)の新規ドキュメントを作成し, 次のスクリプトをフレーム1に書いて(コピペして), 「制御」→「ムービープレビュー」するかパブリッシュして動作確認してみてください。 それなりのもの(デザインとかはまるで凝っていない簡素なもの)が自動作成されると思います。 //========================================== // --- ↓★以下は本当は手動で作成★↓ ------ // 変数 i を 0~9 間で 1 ずつ加算してループ for (i=0; i<=9; i++) { // 履歴表示用テキストフィールド history_txt0~9 を作成 this.createTextField("history_txt"+i, i, 40, 50+i*20, 30, 20); this["history_txt"+i].border = true; } // // 抽選表示用テキストフィールド lot_txt の作成 this.createTextField("lot_txt", 100, 100, 50, 340, 150); this.lot_txt.border = true; // // 抽選表示用テキストフィールドの書式設定 lotTF = new TextFormat(); lotTF.size = 120; lotTF.align = "center"; this.lot_txt.text = "Bingo"; // 抽選表示用テキストフィールドに書式を適用 this.lot_txt.setTextFormat(lotTF); // // ボタン(ボタンとなるムービークリップ) btn_mc を作成 this.createEmptyMovieClip("btn_mc", 200); this.btn_mc._x = 100; this.btn_mc._y = 210; // btn_mc 中の文字を表示するテキストフィールド _txt の作成 this.btn_mc.createTextField("_txt", 0, 0, 0, 0, 0); this.btn_mc._txt.border = true; this.btn_mc._txt.autoSize = true; this.btn_mc._txt.background = true; this.btn_mc._txt.backgroundColor = 0xFF9999; this.btn_mc._txt.text = " 抽選! "; // --- ↑★以上は本当は手動で作成 ★↑ ------ // ビンゴの最小の番号を設定 (☆可変) minNum = 1; // ビンゴの最大の番号を設定 (☆可変) maxNum = 75; // 演出用の「溜め」のフレーム数時間を設定(☆可変) directTime = 30; // データ用配列 dataArr を作成 dataArr = new Array(); // 変数 i を minNum~maxNum 間で 1 ずつ加算してループ for (i=minNum; i<=maxNum; i++) { // dataArr[0]~dataArr[maxNum-minNum] に // minNum~maxNum の値を代入 dataArr.push(i); } // 要素をランダムにシャッフル for (i=0; i<dataArr.length; i++) { // 0 以上 dataArr.length-i 未満の整数の乱数を取得 j = Math.floor(Math.random()*(dataArr.length-i)); // ranArr[dataArr.length-1-i] と ranArr[j] を入れ替える k = dataArr[dataArr.length-1-i]; dataArr[dataArr.length-1-i] = dataArr[j]; dataArr[j] = k; } // 抽選回数カウント用変数 cnt の初期化 cnt = 0; // 抽選ボタン btn_mc クリック時の動作定義 this.btn_mc.onRelease = function() { // この 抽選ボタン のボタン機能を無効にする this.enabled = false; // // ちょっとした演出込みで dataArr の要素を順次表示 // フレーム数カウント用変数 frm の初期化 frm = 0; // 1フレーム進む時間毎に随時実行 this._parent.onEnterFrame = function() { // フレーム数カウントを 1 加算 frm++; // 変数 directNum に演習用の無意味なランダム数を代入 directNum = Math.floor(Math.random()*maxNum)+minNum; // 抽選表示用テキストフィールドに directNum を表示 this.lot_txt.text = directNum; // 抽選表示用テキストフィールドに書式を適用(手動配置では不要) this.lot_txt.setTextFormat(lotTF); // // もしフレーム数カウントが directTime 以上になれば if (frm>=directTime) { // 抽選表示用テキストフィールドに dataArr の cnt 要素を表示 this.lot_txt.text = dataArr[cnt]; // 抽選表示用テキストフィールドに書式を適用(手動配置では不要) this.lot_txt.setTextFormat(lotTF); // 履歴表示用テキストフィールドに dataArr の cnt 要素を表示 this["history_txt"+cnt].text = dataArr[cnt]; // 抽選回数カウントを 1 加算 cnt++; // この 抽選ボタン のボタン機能を有効にする this.btn_mc.enabled = true; // この onEnterFrame を削除 delete this.onEnterFrame; } }; }; //========================================== ※ ActionScript1.0 Flash MX 以上で使用可能 FlashPlayer6 以上用SWFで閲覧可能 手動でテキストフィールドやボタンを作成する場合(普通はすると思います), ボタン は ムービークリップ ではなく,ボタンシンボルのインスタンスでかまいません。 ActionScriptでは ムービークリップ しか作成できないので ムービークリップ を作成しているだけです。 また テキストフィールド lot_txt とか,抽選ボタン btn_mc とか, ステージ上に表示されるものの名前(lot_txt と かbtn_mc とか) は, 全て "インスタンス名" を示しています。