[PR] ソーテック
MENU
脱出ゲームの作り方
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

MENU




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















☆★☆ LINE スタンプ ☆★☆

WANPA WORLD

辛口ユカちゃん

忙しいけどオイラ「ヒマ人」



☆★☆ Amazon ☆★☆



☆★☆ 楽天ショッピング ☆★☆


☆★☆ 楽天トラベル ☆★☆



☆★☆ オススメ:ウォーターサーバ ☆★☆
■島根のおいしい天然水
オススメ!
■スマイルベビー水
島根のおいしい天然水 スマイルベビー水



☆★☆ オススメ:FX取引 ☆★☆
■SBI FXトレード
オススメ!
■FXプライム
FXプライム
■東岳証券 ■MATRIX TRADER
ヒロセ通商 MATRIX TRADER



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