気ままなタンス*プログラミングなどのノートブック

プログラミングやRPGツクール、DTM、VOCALOIDについてのんびり書きます。

【RGSS】自作ウィンドウの表示箇所移動

自分用メモみたいなものです。

ゲーム内に動きがあったら、プレイヤーに通知し
メッセージを見ることができる機能を作っていました。

Shiftキーを押すことによっていつでも見れます。
麦茶改造01

「※経過時間が1日を超えているため、成長度は1日分のみ適用となります」
というメッセージはゲームをロードしたタイミングで追加されるメッセージです。

で、注目するのは、赤枠で囲った部分。

「栽培スキル」ウィンドウ。
これは「mugicha」というゲームで、その名のとおり主人公が麦茶を作っていきます。
そういった仕様のため、栽培レベルのような成長要素を盛り込む必要があるわけです。

今回の改善ポイントはこちら。
【Shiftキーを押したら栽培スキルが見れる】ということ。
単純に表示する場所がおかしいですよね。
Shiftキー経由ではなく、メニューから見れたほうが自然だと思います。

そこで表示場所を変更してみます。


流れは下記のとおり
?Shiftキーの入力を監視しているコモンイベントのスクリプトコメントアウト
?メニュークラスにウィンドウ表示スクリプトを追記する

シンプルです。

?スクリプトのコメントアウト
※画像はすでにコメントアウトしてます。
麦茶改造02

  1. if $information_window != nil
  2.   bool = $information_window.visible
  3.   $information_window.visible = !bool
  4.   if bool
  5.     $game_system.se_play($data_system.cancel_se)
  6.   else
  7.     $game_system.se_play($data_system.decision_se)
  8.   end
  9. end
  10. #すでに!boolによって反転してるため逆を取得
  11. bool = !$information_window.visible
  12. if $iw2 == nil
  13.   $iw2 = Window_Information2.new
  14. else
  15.   $iw2.refresh
  16. end
  17. $iw2.visible = !bool

Window_Information2というのが赤枠で囲ったウィンドウ。
ネーミングセンスというか、クラス名のつけ方がダメすぎて切なくなりました。

まあそれは置いといて。
こいつらをコメントアウト。

  1. if $information_window != nil
  2.   bool = $information_window.visible
  3.   $information_window.visible = !bool
  4.   if bool
  5.     $game_system.se_play($data_system.cancel_se)
  6.   else
  7.     $game_system.se_play($data_system.decision_se)
  8.   end
  9. end
  10. #すでに!boolによって反転してるため逆を取得
  11. #bool = !$information_window.visible
  12. #if $iw2 == nil
  13. #  $iw2 = Window_Information2.new
  14. #else
  15. #  $iw2.refresh
  16. #end
  17. #$iw2.visible = !bool


?をやったので、Shiftキーを押しても表示されなくなりました。
麦茶改造03


?ウィンドウ表示スクリプトを追記する
下記画像のようなメニューを用意しています。通称「麦茶メニュー」
麦茶改造05

3番目に「栽培スキル」という項目があります。
これを選んだときに先ほどのウィンドウが表示されるように変更します。

Scene_MugichaMenu
麦茶改造04

ざっくりと説明すると、
RPGツクールXPはScene(シーン)というところで、ウィンドウや画像を
表示する仕組みとなっています。

たとえば、Scene_Mapであれば、主人公がマップを歩いているときの色んな処理
Scene_Battleであれば、戦闘のときに処理 等を記述します。

Scene_MugichaMenuには、麦茶メニューを表示したときの
色んな処理を書いています。

では、先ほどのウィンドウを表示するために追記。

1.まずはクラスの生成

  1. @crop_skill_window = Window_Information2.new
  2. @crop_skill_window.visible = false
  3. @crop_skill_window.active = false

2.ウィンドウupdate処理の追加

  1. # 栽培ウィンドウがアクティブならば栽培ウィンドウ用の更新メソッドを呼ぶ
  2. if @crop_skill_window.active
  3.   update_crop_skill_window
  4.   return
  5. end

3.更新メソッドの追加

  1. def update_crop_skill_window
  2.   if Input::trigger?(Input::B) || Input::trigger?(Input::C)
  3.     @crop_skill_window.active = false
  4.     @crop_skill_window.visible =false
  5.     @command_window.active = true
  6.     $game_system.se_play($data_system.cancel_se)
  7.     return
  8.   end
  9. end


RGSSにウィンドウ表示処理を追加するときは、基本的にこんな感じの流れでいけると思います。

【修正後】
麦茶改造06

栽培スキル選択したときに表示されるようになりましたー。
すっきりしたところで、次は「麦茶リスト」のコーディングに取り掛かろうと思います。
麦茶リストとは、主人公が作成した麦茶たちの状態を見れる機能。


え?Window_Information2の名前は変えないのかって?

・・・思い出として残しておきます。
あくまでも思い出として。決して変更が面倒なわけじゃry

終わり。