[PR] ソーテック

ParaFlaにおけるFLASHゲームの作り方等を解説するサイト WANPA's 工房

脱出ゲームの作り方
MENU

1.はじめに
2.部屋の遷移について
3.画面の遷移について
4.フラグについて
5.表示の変化について
6.スプライトで機能分離
7.メッセージ機能の実装
8.アイテムの取得
9.アイテムの表示
10.アイテムの使用
11.about item(前編)
12.about item(後編)
13.細かいこと
14.アップしない引き出し
15.パスワード入力装置
16.タイトルとオープニング




スポンサードリンク

5.表示の変化について


第5章ではいよいよスプライトを使用します。
スプライトはParaFlaにおいて非常に重要かつ強力な概念・機能です。
これをうまく使えるようになれば、ParaFlaの世界がグッと広がると思います。

スプライトの強力な所は、通常のオブジェクトと違って、
スプライト自体にAction Scriptを記述できることです。
(これをクリップアクションと言います。)

例えば、赤丸と青丸を右側に移動させるようなFLASHを考えます。
通常のオブジェクトのみを用いた場合、
「赤丸表示→青丸表示→赤丸移動→青丸移動」
としか記述できないため、赤丸と青丸が同時に移動するということが出来ません。



しかし、スプライトを用いて赤丸と青丸を表示した場合、
「赤丸スプライト表示→青丸スプライト表示」、かつ、
「赤丸スプライトに『右側に移動』というクリップアクションを記述」
「青丸スプライトに『右側に移動』というクリップアクションを記述」
とすることで、赤丸と青丸を独立して移動させることが出来ます。



イメージ的には、スプライトを使用することで、
独立して操作できるオブジェクトを複数作ることが出来る、といった感じです。


スプライトを脱出ゲームに用いていくわけですが、本章では、
「ボタンの近くにOFFという表示があり、ボタンを押すとONという表示に変化する」
という機能を実装することにします。

現状ですと、ボタンが押されたかどうかという情報は、
_root.room3_buttonというフラグで管理しています。
そこで、button_hyoujiというスプライトを新たに作成しまして、
これを用いてON・OFFを表示させます。
また、button_hyoujiクリップアクションにおいて
_root.room3_buttonの状態を常に監視し、
_root.room3_buttonがfalseであればOFFを表示
_root.room3_buttonがtrueであればONを表示という処理を記述します。


それでは、早速実装していきます。
ここでは、部屋3に設置された押しボタンの隣に、
ON・OFFという表示窓を設置することにします。
5章では押しボタンの使用を少し変更しまして、
「OFFのときのボタンを押すとON、ONのときにボタンを押すとOFFになる」、かつ、
「ボタンがONのとき部屋2の箱を開けることが可能になる」とします。

今回、追加した絵は以下の通りです。
 ・OFF.pdr
 ・ON.pdr

さらに「スプライト:button_hyouji」を作成しまして、
OFF.pdr、ON.pdrを、スプライト:button_hyoujiに追加します。
このとき、以下のようにラベルと停止も一緒に追加しておきましょう。

スプライトに画像を追加

そして、このスプライトをroom3上に配置し、かつ、
クリップアクションを記述します。
記述するクリップアクションは以下の通り。

onClipEvent (enterFrame) {
	if (_root.room3_button == false){
		this.gotoAndPlay("OFF");
	}else{
		this.gotoAndPlay("ON");
	}
}

onClipEvent (enterFrame)というのは、
このスプライトが表示されている限り、
毎フレーム{}内の処理を行いますよ
、という意味です。
要するに、スプライト:button_hyoujiが表示されている限り、
_root.room3_buttonがtrueかfalseかを常に監視しておき、
ラベル"OFF"にジャンプ(=OFFを表示)するか、
ラベル"ON"にジャンプ(=ONを表示)するかを決定するわけです。

以上を実装したFLASHは以下のようになります。



room3のボタンを押す度にON・OFFの表示が変更されるのが確認できます。
それに伴い、room2の箱が開閉可能・不可能になります。
これで、希望の機能は実装できたことになります。



…が、実はこのFLASHには落とし穴が存在しています。
といいますのは、_root.room3_button = falseのときは特に問題がないですが、
_root.room3_button = trueのときに、他の部屋からroom3に遷移すると、
最初の一瞬だけ"OFF"が表示がされ、それから"ON"に変化する、という現象が見られます。
ほんの一瞬の表示なのですが、脱出ゲームではこれが致命的になることがあります。
大抵の場合、脱出ゲームにおいて、このように微妙な変化が存在する箇所は、
アクションを起こすと何か起こる場合が多いですので、
プレイヤーに望まぬ形でヒントを与えてしまい、興をそいでしまいます。

なぜ、このようなことが起こるか?という原因ですが、それは、
現状のスプライト:button_hyoujiは、ロードされた瞬間の表示がOFFであり、
その次のフレームで、onClipEvent(enterFrame){}によって、表示がONに変化するからです。
OFFからONに変化する時に1フレームの間隔が存在するわけですね。

これを解決手段として考えられるのは、
スプライトがロードされた瞬間に、
その表示をON or OFFに振り分けてしまう処理を入れることです。
直感的には、スプライト:button_hyoujiのクリップアクションを
以下のように変更すればよいことになります。

onClipEvent (Load) {
	if (_root.room3_button == false){
		this.gotoAndPlay("OFF");
	}else{
		this.gotoAndPlay("ON");
	}
}
-
onClipEvent (enterFrame) {
	if (_root.room3_button == false){
		this.gotoAndPlay("OFF");
	}else{
		this.gotoAndPlay("ON");
	}
}

ただ単に、onClipEvent (enterFrame)イベントの上に、
{}の中身が全く同じonClipEvent (Load)イベントを追加しただけです。
ちなみに、onClipEvent (Load)というのは、
このスプライトをロードしたときに{}内の処理を実行する、という意味です。
表示よりも先行して振り分け処理が行われるようになるため、
上で記述した問題を解決することが出来ます。
思いっきりコピペしただけなので、あまりエレガントな解決手法ではないですが、
管理人は結構多用しています(汗)

問題を解決したFLASHは以下のようになります。



先ほどのFLASHのように、一瞬OFFが表示されるといった問題はなくなっております。

第5章はこれで終了です。
本章で解説したスクリプトは、脱出ゲームにおいて非常に良く使われます。
例えば、床に落ちてるアイテムを拾おうとした場合、
クリックしたらそのアイテムを非表示にする必要があります。
これを実現するためには、基本的にスクリプトを使用します。

次の章ではスプライトについて、もう少し詳しく解説していこうと思います。


この章で作成したファイルはこちらから。
問題解決前のファイルがsample_escape5-1.pfl、
解決後のファイルがsample_escape5-2.pflとなります。
  lzh形式
  zip形式
※このファイルは使用・流用は自由としますが、そのままの転載は不可とします。
使用・流用した場合、強制ではありませんが、連絡・クレジット等をしていただければ幸いです。

次章:6.スプライトで機能分離
前章:4.フラグについて
Home

Copyright(C) 2007-2008 WANPA. All rights reserved.