脱出ゲームの作り方:目次
前回の記事
-
【脱出ゲームの作り方】4.フラグについて
脱出ゲームの作り方:目次 目次 前回の記事 はじめに 第4章ではフラグについて解説いたします。 「フラグ」というのは、「○○が起きたので、△△が ...
続きを見る
はじめに
第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.スプライトによる機能分離
脱出ゲームの作り方:目次 目次 前回の記事 はじめに 第6章では引き続き、スプライトに関するトピックになります。 スプライトによる ...
続きを見る