dポイントプレゼントキャンペーン実施中!

FlashMxで簡単な連打ゲームを作りたいと思ってます。
が、本を見てもいまいち理解できません。


あるオブジェクトをマウスで連打して、
制限時間内に50回連打できたらオブジェクトが形を変えてクリア、
できなかったらオブジェクトはそのままでゲームオーバー

というようなゲームを作りたいのですが、どうやったらできるのでしょうか。


Flash初心者ですがよろしくお願いします。

A 回答 (1件)

おそらく,


説明するのも難しいのだとは思います。
それで今ひとつ,したい内容のイメージが湧きにくいので,
ちゃんと回答できませんが,
原理っぽいことだけをサンプルで説明したいと思います。

今作られているものがわからないので,
それはそのまま保留で,ファイルを新規に作成してください。


====== 簡単なサンプル1 ============

まずドキュメントを新規作成します。
そして,
そのムービーのタイムラインを2フレーム・2レイヤーにしてください。
上のレイヤーをスクリプト専用レイヤー,
下のレイヤーをオブジェクト専用レイヤーと一応決めておきます。

             1
 □ レイヤー 筆・・|○ []| ←スクリプトレイヤー
 □ レイヤー 筆・・|○ []| ←オブジェクトレイヤー

そして上レイヤーの フレーム1 に次のようなスクリプトを書いてください。
コピペ可です。

-------------------------------
//フレーム1でストップ
stop();
//変数count の初期値を 0 に設定
count = 0;
-------------------------------

次に,タイムラインで 下レイヤー を選択し,フレーム2 もキーフレームにしてください。
そして,タイムラインで 下レイヤー の フレーム1 を選択し,
ステージ上に適当な塗りの四角を書いて,
右クリック→シンボルに変換 でボタンシンボルにしてください。
そして,そのボタンに次のようなスクリプトを書いてください。
コピペ可です。

------------------------------
on (release) {
//変数count を 1 ずつ加算
count++;
//もし count が 50 になれば
if (count == 50) {
//フレーム2 に行ってストップ
gotoAndStop(2);
}
}
------------------------------

次に,タイムラインで 下レイヤー の フレーム2 を選択し,
ステージ上に,「成功!」とでもテキストを書いてください。
テキストの種類や文字は何でも良いです。
単なる フレーム2 である目印です。

             1
 □ レイヤー 筆・・|○ []| ←スクリプトレイヤー
 □ レイヤー 筆・・|●|●| ←オブジェクトレイヤー
          ボタン↑ ↑文字

そして,SWFをパブリッシュしてみてください。
ボタンを50回クリックすれば,フレーム2 に行くムービーが完成すると思います。

これが,「50回連打できたら○○」 という部分です。
フレーム2 以降にボタンが変形するアニメーションを用意すれば良いかもしれません。
具体的なイメージがわかりませんし,方法はいろいろありますからなんとかその辺は考えてもらうしかないです。

「50回連打できたら○○」 の方法はわかりますか?
何でも良いので適当に "変数" というものを用意して,
その "変数" の "値" を変化させて,
変数の値がある条件をクリアすれば,○○するという方法です。

count というのは勝手に作った変数名で,
ringo1 でも banana25 でも適当に半角英字から始まっていて,
スクリプトに存在しないような単語であれば何でも良いです。
変数は値の入れ物です。

ボタンのスクリプトの中ですが,
count++; という部分があります。これは,
count = count +1; と同じ意味です。
変数 = 変数 + 1;
というパターンは良く使われるので,
count++; や count+=1; などと省略できます。
変数 = 変数 + 2; は上記のように 変数++; とは省略できません。
変数 = 変数 + 2; または 変数+=2 となります。

ボタンのスクリプトには if文 も使われています。
if文は条件分岐です。
if(○○){ } 
もし(○○)が成立すれば,{ }内を実行するという文です。
参考URL
FLASHアクションスクリプト入門編 「if / if else文」
http://isvalid.jp/actionscriptLab/ASlesson/actio …

=================================


上記 簡単なサンプル1 では,
「50回連打できたら○○」の方法は説明しましたが,
まだ「制限時間内に~」という部分が抜けています。
「50回連打できたら○○」の方法は,おそらく誰がやってもどんな場合でも,
「変数を用意」
  → 「変数をカウントアップ」
    → 「条件成立で何か動作」
という流れは変わらないと思います。
しかし「制限時間内に~」 というのは様々な方法があって,
人によって,また場合によって変わるので答えにくいです。
ですから,以降のサンプルは単なる一例だと思ってください。


====== 簡単なサンプル2 ============

簡単なサンプル1 で作ったムービーに1フレーム追加して,3フレームにしてください。
そして 下レイヤー の フレーム3 をキーフレームにしてください。
フレーム2 のステージ上には 「成功!」 みたいなテキストを書いたので,
フレーム3 のステージ上にも 「成功!」 みたいなテキストになっていると思いますから,
フレーム3 のテキストを「残念!」みたいなのに書き替えてください。
これも単なる フレーム3 に行ったことの目印ですから何でもかまいません。

そして上レイヤーの フレーム1 にスクリプトを以下のように書き替えてください。
コピペ可です。

-----------------------------
//フレーム1でストップ
stop();
//変数count の初期値を 0 に設定
count = 0;

// 関数zannen を 一定時間後に実行
zannen = setInterval(function () {
// フレーム3 に行ってストップ
gotoAndStop(3);
// この 関数zannen をクリア
clearInterval(zannen);
// 10000ミリ秒(10秒)後に
}, 10000);
-----------------------------

そして,ボタンのスクリプトを次のようにを書き替えてください。
コピペ可です。

-----------------------------
on (release) {
//変数count を 1 ずつ加算
count++;
//もし count が 50 になれば
if (count == 50) {
//フレーム2 に行ってストップ
gotoAndStop(2);
// この 関数zannen をクリア
clearInterval(zannen);
}
}
-----------------------------

要は setInterval を使って何もしなければ自動的に フレーム3 に行くのですが,
ボタンを50回連打できた場合にかぎり フレーム2 に行くというしくみです。
setInterval は以下のような構造になっています。

<ID名> = setInterval(function () {
<ステートメント>;
clearInterval(<ID名>);
}, <実行間隔(ミリ秒)>);

詳しくはこちらを参考にしてみてください↓。
参考URL
「外部SWFムービー内のfunctionをロード直後に呼出す」
http://www.fumiononaka.com/TechNotes/Flash/FN030 …

=================================


わかりますか?
簡単なサンプル2 では setInterval を使っていますが,
別にこんなものは使う必要は全くないのです。
ボタンを50回連打できてもできなくてもそんなことは関係なく,
自動的にある動作をするようにしておけばいいのです。
たまたま「ボタンを50回連打できた場合」に限ってちがう動作をするしくみを作ればいいのです。

例えば
51フレームのムービーを作って,50フレーム目で stop();
ボタンを50回連打できた場合に限って,51フレーム目に行く。

とかでも時間制限はできます。
だから,方法自体は 簡単なサンプル1 の説明で済んでいることになります。
ボタンが動き回るような場合は,
簡単なサンプル1 の状態をムービークリップ内に作って,
ボタンを動き回らせても良いと思います。
ムービークリップ内にボタンを作った場合は,パスに気を付けてください。


以上,原理っぽいことだけをサンプルで説明しました。
    • good
    • 0
この回答へのお礼

大変わかりやすかったです。
無事に作ることができました。
ありがとうございました^-^

お礼日時:2005/12/09 15:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!