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

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

【RPGツクールVXace】RGSSとRGSS3

僕はRPGツクールXPユーザーだ。
RPGツクールXPを購入して6年近くが経過した(内4年くらいは全くRGSSに触れずじまい)わけだが、
未だにRGSSを使いこなせている気がしない(ゲーム1本もできてないし)

そんな中、10月のある日何を血迷ったのか、
ストレス解消という名目で、RPGツクールVXaceを購入してしまった。

どうせ1週間程度で、いわゆる"エターなる"と思っていたが・・・意外と制作は続いている。
エターナるとは)

特にVXaceに魅力的な機能があったわけではない。
本当に、ふと思いついてなんとなく購入したので、熱い想いは語れない。
(残業がすごく辛かったんだと思います、はい)

RGSSは、無印からRGSS2、RGSS3へと仕様変更され・・・あれ?
RGSS3?ナニソレ

「具体的にRGSSとRGSS3って何が違うん?」

ということで、気持ちの切り替えをしてみましょう。

まだ勉強中ということもあり、詳しくは書けない。

・Sceneクラスの管理はSceneManager経由で行うことになった
→$sceneグローバル変数への直接代入の禁止。
SceneManager.call(Sceneクラス名) で呼び出し
イベントハンドラーの導入
→各ウィンドウオブジェクトがactiveかどうかの判断を経て、各ウィンドウのupdateを呼び出す形式ではなく、
ウィンドウごとに設定したイベント(ok, cancel)によって、対応するメソッドを呼び出す形式となった。

以下にRGSSとRGSS3の記載例を示す

  1. #RGSS
  2. class Scene_Hoge
  3.     def main
  4.     @command_window = Window_Command.new(200, ["hoge","hoge"])
  5.     @command_window.active = true
  6.     Graphics.transition
  7.     loop do
  8.         Graphics.update
  9.         Input.update
  10.         update
  11.         if $scene != self
  12.             break
  13.         end
  14.     end
  15.     Graphics.freeze
  16.     @command_window.dispose
  17. end
  18. def update
  19.     if @command_window.active
  20.         command_window_update
  21.     end
  22. end
  23. def command_window_update
  24.     if(Input.trigger?(Input::B))
  25.         $game_system.se_play($data_system.cancel_se)
  26.         # 呼び出し元のシーンはScene_Mapだったと想定し、Scene_Mapへ戻る
  27.         $scene = Scene_Map.new
  28.     end
  29. end


  1. #RGSS3
  2. class Scene_Hoge < Scene_Base
  3.     def start
  4.         super
  5.         @command_window = Window_Command.new(0, 0)
  6.         @command_window.width = 200
  7.         @command_window.add_command("hoge", :symbol_string) 
  8.         @command_window.add_command("hoge", :symbol_string)
  9.         # キャンセルされたときは、呼び出し元のシーンへ戻る
  10.        @command_window.set_handler(:cancel, method(:return_scene))
  11.         #[Scene_Base.return_scene] =>     [SceneManager.return]
  12.     end
  13. end

コードがすごく短い。