10.その他
1.マップ名の取得
デフォルトの状態ですと、マップ名は読み込まれていません。
しかし、ファイルとしては出力されているので、それを読み込めば取得できるようになります。
データベースの情報は、Scene_Title#load_database で読み込まれていますが、
この情報はゲーム中に変化することはないので、どこで読み込んでも同じです。
ですので、トップレベルで読み込みたいと思います。
もし、マップ1の名前が知りたい場合は、$data_mapinfos[1].nameとすると取得できます。
現在のマップ名を取得するには、$data_mapinfos[$game_map.map_id].nameとします。
しかし、ファイルとしては出力されているので、それを読み込めば取得できるようになります。
データベースの情報は、Scene_Title#load_database で読み込まれていますが、
この情報はゲーム中に変化することはないので、どこで読み込んでも同じです。
ですので、トップレベルで読み込みたいと思います。
$data_mapinfos ||= load_data("Data/MapInfos.rvdata")このデータは、ハッシュでid => RPG::MapInfo オブジェクトのようになっています。
もし、マップ1の名前が知りたい場合は、$data_mapinfos[1].nameとすると取得できます。
現在のマップ名を取得するには、$data_mapinfos[$game_map.map_id].nameとします。
2.マップ上にウィンドウを表示
マップ上にウィンドウを表示する場合は、Scene_Map クラスにウィンドウを追加します。
2.ウィンドウのようにイベントコマンドを使う場合は、
そのイベント内で完結(ウィンドウの生成と消去)させるようにしないと思わぬ不具合が生まれます。
シーンクラスにウィンドウを追加する処理は、基本と変わりません。
Sprite だと Spriteset に追加してもいいかもしれません。
ウィンドウのクラスも別に作っておきましょう。
ウィンドウを非表示にしたい場合は、スイッチなどを使用するといいと思います。
2.ウィンドウのようにイベントコマンドを使う場合は、
そのイベント内で完結(ウィンドウの生成と消去)させるようにしないと思わぬ不具合が生まれます。
シーンクラスにウィンドウを追加する処理は、基本と変わりません。
Sprite だと Spriteset に追加してもいいかもしれません。
ウィンドウのクラスも別に作っておきましょう。
ウィンドウを非表示にしたい場合は、スイッチなどを使用するといいと思います。
# Window_Time#initialize def initialize super(0, 0, 200, 56) self.visible = $game_switches[1] (中略) end # Window_Time#update def update self.visible = $game_switches[1] super return unless self.visible (中略) end
3.マップ上でコマンドの操作
今回のサンプルでは、Yボタンで表示して選択されたアクターを
パーティの先頭にするというスクリプト作ってみます。
まず、コマンドウィンドウを表示したいと思います。
Window_Command クラスを継承した Window_Test クラスを定義します。
マップ上で操作したいので、Scene_Map クラスに処理を追加します。
これで、マップ画面でウィンドウが表示されて操作もできると思います。
無事表示されることが確認できましたら、今度はウィンドウの開閉処理を追加したいと思います。
ウィンドウの開閉はアニメーションさせたいので、Window_Base クラスに定義されている
open と close メソッドをオーバーライドします。
ウィンドウが開閉されているかどうかは、active プロパティを使用して確認したいと思います。
さらに、シーンクラスのほうに処理を追加します。
これで、Yボタンを押すとコマンドが表示されて、表示中はキャラが移動しなくなります。
次に決定時の処理を追加したいと思います。
選択されたアクターをパーティの先頭に持ってきたいので、アクターを移動する処理を定義します。
さらに、シーンクラスのほうに処理を追加します。
これで、パーティのメンバーの順番が変更されるはずです。
最後にコマンドウィンドウのサイズを調整する機能を付けたいと思います。
パーティの人数がいつも同じとは限らないので、コマンドを表示する時に調整するようにしてみます。
最後の最後に効果音などを追加して完成です。
条件分岐がネストなどで複雑になる場合は、メソッドに分けて
条件分岐にガード節を使用すると見やすくなりますよ。
ガード節というのは、画像のような return などで処理を中断する方法です。
パーティの先頭にするというスクリプト作ってみます。
まず、コマンドウィンドウを表示したいと思います。
Window_Command クラスを継承した Window_Test クラスを定義します。
マップ上で操作したいので、Scene_Map クラスに処理を追加します。
これで、マップ画面でウィンドウが表示されて操作もできると思います。
無事表示されることが確認できましたら、今度はウィンドウの開閉処理を追加したいと思います。
ウィンドウの開閉はアニメーションさせたいので、Window_Base クラスに定義されている
open と close メソッドをオーバーライドします。
ウィンドウが開閉されているかどうかは、active プロパティを使用して確認したいと思います。
さらに、シーンクラスのほうに処理を追加します。
これで、Yボタンを押すとコマンドが表示されて、表示中はキャラが移動しなくなります。
次に決定時の処理を追加したいと思います。
選択されたアクターをパーティの先頭に持ってきたいので、アクターを移動する処理を定義します。
さらに、シーンクラスのほうに処理を追加します。
これで、パーティのメンバーの順番が変更されるはずです。
最後にコマンドウィンドウのサイズを調整する機能を付けたいと思います。
パーティの人数がいつも同じとは限らないので、コマンドを表示する時に調整するようにしてみます。
最後の最後に効果音などを追加して完成です。
条件分岐がネストなどで複雑になる場合は、メソッドに分けて
条件分岐にガード節を使用すると見やすくなりますよ。
ガード節というのは、画像のような return などで処理を中断する方法です。
4.
5.