- ベストアンサー
景品パネルの作り方
- FLASH初心者が結婚式の二次会の幹事をする際に、パネルを使った景品ゲームを行いたい。
- パネルの裏に別の絵を表示させ、ランダムに景品を抽出し、特定の景品は後の方で表示されるようにしたい。
- FLASH初心者のため、作成の概要やアクションスクリプトなどの教えていただけると助かります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1です CS5 をお使いでしたら パネルがめくれるアニメーションを作る際に ムービークリップを「3D 回転」させると よりリアルな表現ができると思います【添付図↓】 しかしこの機能を使うには ActionScript 3.0 のパブリッシュ設定にする必要があります。 そうなると #1 のスクリプトは使えません。 またお礼に ActionSctipt 3.0 をご希望と書いていらっしゃるので 3.0 に書き換えました。 ActionScript 3.0 設定の 新規ドキュメント を作成し フレーム1にコピペ→「制御」→「ムービープレビュー」する例です。 --------------- //適当に9個のMCを作成(本当は手動で作成) for (var i:uint = 0; i <= 8; i++) { this["panel" + i] = new MovieClip(); this["panel" + i].x = i % 3 * 60 + 40; this["panel" + i].y = Math.floor(i / 3) * 40 + 20; this["panel" + i].buttonMode = true; this["panel" + i].mouseChildren = false; this["panel" + i].txt = new TextField(); this["panel" + i].txt.autoSize = TextFieldAutoSize.CENTER; this["panel" + i].txt.border = true; this["panel" + i].txt.text = "panel" + i; this["panel" + i].addChild(this["panel" + i].txt); this.addChild(this["panel" + i]); } //9つの要素の配列を作成 //最後の Z を "特定の景品" 対象文字とする var arr:Array = new Array("A","B","C","D","E","F","G","H","Z"); //クリック数カウント用変数を用意 var cnt:uint = 0; for (i = 0; i <= 8; i++) { //9個のMCクリック時に関数 mcClick を実行 this["panel" + i].addEventListener(MouseEvent.CLICK,mcClick); } //関数 mcClick を定義 function mcClick(e:MouseEvent):void { //カウントを1加算 cnt++; //乱数を入れる変数の宣言 var rnd:uint; //もしカウント数が6以下であれば if (cnt <= 6) { //0~配列の最終要素-1までの乱数を取得 rnd = Math.floor(Math.random() * (arr.length - 1)); //カウント数が6以上であれば(最後の方であれば) } else { //0~配列の最終要素までの乱数を取得 rnd = Math.floor(Math.random() * arr.length); } //その乱数要素を配列から削除して取得表示 e.currentTarget.txt.text = "景品" + arr.splice(rnd,1); //クリック動作を削除(重複クリック防止) e.currentTarget.removeEventListener(MouseEvent.CLICK,mcClick); e.currentTarget.buttonMode = false; } --------------- なお ActionScript 3.0 ではシンボルに識別子を付けられません。 もしライブラリからシンボルを呼び出す場合は クラス名を付けて new ○○ で呼び出します。 その場合はこの辺をご参考に↓。 「F-site [AS3] クラスを文字列で参照したい」 http://f-site.org/articles/2008/01/17051234.html あと#1も2も字数制限ほぼいっぱいで これ以上詳細な説明はココでは難しいです。
その他の回答 (1)
- BlurFiltan
- ベストアンサー率91% (1611/1754)
Flash のバージョンなどを一切書かれていらっしゃらないため 具体的な回答がしにくいですが。。。 回答できないので 勝手に(かなり無難に) Flash MX 以上をお持ちで ActionScript 1.0 または 2.0 をご使用で Flash Player 6 以上で動作するものと決めます。 (Flash MX 以上 とは Flash MX,Flash MX 2004,Flash 8,Flash CS3,Flash CS4,Flash CS5 のことです。) 「パネル」 に対して 「ランダムな裏」 を考えると 特に (3) の条件がややこしくなります。 そこで 『クリック』 に対してのみ 『ランダムな裏』 を考えます。 そうすると比較的簡単になると思います。 ActionScript 1.0 または 2.0 設定で 新規ドキュメント を作成し (Flash MX は ActionScriptバージョンの選択はできない。) 次のスクリプトをフレーム1にコピペして 「制御」→「ムービープレビュー」などをしてみてください。 ------------------------ //適当に9個のMCを作成(本当は手動で作成) for (i = 0; i <= 8; i++) { this.createEmptyMovieClip("panel" + i, i); this["panel" + i]._x = i % 3 * 60 + 40; this["panel" + i]._y = Math.floor(i / 3) * 40 + 20; this["panel" + i].createTextField("txt", 0, 0, 0, 0, 0); this["panel" + i].txt.autoSize = "center"; this["panel" + i].txt.border = true; this["panel" + i].txt.text = "panel" + i; } //9つの要素の配列を作成 //最後の Z を "特定の景品" 対象文字とする var arr = new Array("A", "B", "C", "D", "E", "F", "G", "H", "Z"); //クリック数カウント用変数を用意 var cnt = 0; for (i = 0; i <= 8; i++) { //9個のMCクリック時の動作 this["panel" + i].onRelease = function() { //カウントを1加算 cnt++; //もしカウント数が6以下であれば if (cnt <= 6) { //0~配列の最終要素-1までの乱数を取得 var rnd = Math.floor(Math.random() * (arr.length - 1)); //カウント数が6以上であれば(最後の方であれば) } else { //0~配列の最終要素までの乱数を取得 var rnd = Math.floor(Math.random() * arr.length); } //その乱数要素を配列から削除して取得表示 this.txt.text = "景品" + arr.splice(rnd, 1); //クリック動作を削除(重複クリック防止) delete this.onRelease; }; } ------------------------ 実際の作成例としては カードが裏返るアニメーション入りのMC(ムービークリップ)を9個用意しておいて それぞれのシンボル(≠インスタンス)に適当な識別子を付け クリックしたカードと同じ座標に ランダムなシンボルを attachMovie() で呼び出すというような工夫も考えられます。 (あくまでも工夫の一例です。他にも方法はあります。) 「リンケージについて」 http://www.1art.jp/flash2/chapter/33/33.htm
お礼
教えていただいたscriptをコピペすると僕のイメージしているものが表示されました。 actionscript3.0だとエラーがでました。 申し訳ないのですが、実際の作成例として示していただいた方法についても、actionscriptを記載して頂けませんか? 是非宜しくお願いします。
補足
ご回答ありがとうございます。 FLASHのバージョンはCS5をOSはMacOS10.6.6を使用しております。今日はちょっと時間がないので明日以降試させていただきます。 また結果を報告致します!!