FLASH初心者です。今度友人の結婚式の二次会の幹事をすることになりました。
そこでゲームをするのですが、景品を選んでもらうときに以下のような方法で景品を表示したいのです。
9枚のパネルが並んでおり、そのうちの1枚をクリックするとパネルがめくれて裏に書いてある景品が表示れる。これをゲームの勝者に1人ずつ選んで貰うというものです。
現在悩んでいるのは、
(1)パネルの裏に別の絵があるようにしたい
(2)景品はランダムに抽出したい(1番のパネルにはAの景品、2番のパネルにはBの景品と決めておかない)
(3)特定の景品は後の方で表示されるようにしたい。
ということなのですが。。。
FLASH初心者のため、悩んでおります。よい方法がありましたら作成の概要や、アクションスクリプトなど教えていただければ幸いです。
No.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も字数制限ほぼいっぱいで
これ以上詳細な説明はココでは難しいです。
No.1
- 回答日時:
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
この回答への補足
ご回答ありがとうございます。
FLASHのバージョンはCS5をOSはMacOS10.6.6を使用しております。今日はちょっと時間がないので明日以降試させていただきます。
また結果を報告致します!!
教えていただいたscriptをコピペすると僕のイメージしているものが表示されました。
actionscript3.0だとエラーがでました。
申し訳ないのですが、実際の作成例として示していただいた方法についても、actionscriptを記載して頂けませんか?
是非宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 消費者問題・詐欺 景品表示法違反についてです FC先行抽選とアナウンスあったものが当日蓋を開けると先着ですでに販売終了 1 2022/12/05 21:54
- ホームベーカリー・ホットプレート・圧力鍋 ホームベーカリーについて教えてください。 全くの初心者なので、たくさん使うかも分からず購入を悩んでい 1 2022/12/25 02:16
- その他(生活家電) 太陽光パネル規格外品の個人宅への流用 3 2023/04/17 15:14
- ボードゲーム 懇親会があり、ビンゴゲームでビンゴになったので景品をもらいました。景品余ったので早いもん勝ちで もら 4 2023/03/28 23:47
- 日本語 グルメ貧乏 5 2023/02/12 08:38
- その他(パソコン・スマホ・電化製品) アンドロイドスマホの画面にクリックするとJPG写真が開くショートカットを作りたいのですが、方法をおし 3 2023/08/27 10:01
- くじ・懸賞 彼氏と花見等に行って屋台で食べ物を買ったり祭りくじがあるのを見て彼氏が「くじ引きね、景品表示法って法 2 2022/04/03 09:42
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
- 消費者問題・詐欺 代金を払ってくじを引いて、当たりが出たのにくじ販売業者の不手際(最初から用意してなかった)で景品がも 3 2022/09/27 16:07
- 日本語 「すごく貴重」という意味の四字熟語教えてください 3 2022/10/16 21:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
uwscでExcelに自動記入
-
potplayerについて質問です
-
フラッシュゲームアーカイブ2
-
VBAのコンボボックスの年月表示...
-
キャラクター設定について
-
レジリエンス 変換キーが作動し...
-
arduino プログラムについて
-
iPhoneです。 Adobeフラッシュ...
-
FLASH MX で作成した、flashやA...
-
アメブロで音声ファイルを貼る方法
-
何種類の値があるかを調べる方...
-
この曲はなんでしょう?
-
laptop go2からの買い替え、lap...
-
スクリップト
-
私のコンピューター上のファイ...
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NET の配列の要素数
-
配列の要素番号を取得するには?
-
VBでボタンを押すと画像をラン...
-
重複しない乱数整数を発生させる。
-
変な質問ですみません、n番目の...
-
DataGridでCTRLキーを押さずに...
-
複数の変数宣言を、for文で一気...
-
VB6 複数行のテキストをリスト...
-
ランダムに数字を並び変える方法は
-
Vba 配列の中の特定文字列の位...
-
IDの自動採番について
-
[Objective-c]多次元配列のアク...
-
Flashでお絵描きアプリを作って...
-
ランダムに6つの数字を選びその...
-
【ActionScript】配列の昇順降...
-
画像をランダムに表示するには
-
【数字ランダム】計算問題ラン...
-
FlashソフトSuzukaで、トランプ...
-
ランダム表示を重複させないよ...
-
Flashでランダムクイズゲームを...
おすすめ情報