2016年9月7日水曜日

積み残し部分の実装と早速の方式見直し

前回の記事の最後に、以下の2件が積み残しであると書きました。

  • システム情報から、戦闘中フラグを参照し、戦闘中は表示しないようにする。
  • 同、メニュー表示中


上記の、実装方法に関する記述はウディタでの経験を元にした推測なのですが、実装しようとしたところ、「システム情報からフラグを参照」して表示を切り替えるという方法での実装は不可能であることが分かりました。

ツクールには戦闘中などのフラグは無いものの、「シーン」という概念で現在の状態が管理されており、現在の「シーン」が戦闘であるか、メニューであるかという確認方法を取れば可能だということが分かりましたが、それとは別の箇所で問題が発見されました。

それは以下のような方式で処理が呼びされてる仕組みになっていたことでした。

マップシーン

コモンイベント

スクリプト(自作)

つまり、従来のコモンイベントからスクリプトを起動する方式では、マップ表示中しか実行されません。
そして、スプライトは一度表示したら自動的に表示され続ける仕組みです。どこかで明示的に非表示にする必要がありますが、メニューが表示された場合や戦闘が始まった場合には、非表示にするタイミングすら無くスクリプトは呼ばれなくなります。


この問題を修正するにあたり、以下のような既存のスクリプトを参考にしました。

これは、コメントにある通り、アップデートにより修正された部分の記述です。
既存のクラス定義を書き換えることによって実装されています。
クラス名は既存のものであり、メソッド名はaliasを用いて既存のものを退避することで、新しいメソッドの中で旧来のメソッドを呼ぶことを可能にしています。

これに倣い、以下のように実装しました。

この部分では、マップシーンで定義されている、フレーム更新処理を上書きし、ステータス表示処理を追加しています。
シーンが遷移しつつある場合は非表示になるようにしているので、マップシーンから別のシーンに切り替わった場合は、非表示になった状態で当該箇所のスクリプトが呼ばれなくなります。
再びマップシーンに移行した場合、再び表示状態に戻ります。


そういうわけで、この通り上手く行きました。




次回は、尿関連ステータスの増え方を自然にする調整かなぁ。
また波とか作って無いし。

0 件のコメント:

コメントを投稿