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

プログラミングやRPGツクール、DTM等について、学んだことや備忘録をアウトプットとして残し、情報を必要としている誰かにとって「かゆいところに手が届く」ツールでありたいという願いを込めつつ、記事を書きます。

【RPGツクールVXace】RGSSとRGSS3

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

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

いわゆる"エターなる"状態になると思っていたのですが・・・意外と制作は続いています。
エターナるとは)

さて、RPGツクールVX aceを起動し、早速Rubyを書こうとドキュメントを開いてみると、あることに気づきました。

あれ?RGSS3ってなんだ?RGSSじゃないの?

そう、ツクールのRubyゲームエンジンもバージョンアップしていたのです。

さて、あまり確認できていないため、ざっくりとではありますが、変更点を記載いたします。

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


以下にRGSSとRGSS3の記述例を示します。

#RGSS
class Scene_Hoge
    def main
    @command_window = Window_Command.new(200, ["hoge","hoge"])
    @command_window.active = true
    Graphics.transition
    loop do
        Graphics.update
        Input.update
        update
        if $scene != self
            break
        end
    end
    Graphics.freeze
    @command_window.dispose
end
def update
    if @command_window.active
        command_window_update
    end
end
def command_window_update
    if(Input.trigger?(Input::B))
        $game_system.se_play($data_system.cancel_se)
        # 呼び出し元のシーンはScene_Mapだったと想定し、Scene_Mapへ戻る
        $scene = Scene_Map.new
    end
end
#RGSS3
class Scene_Hoge < Scene_Base
    def start
        super
        @command_window = Window_Command.new(0, 0)
        @command_window.width = 200
        @command_window.add_command("hoge", :symbol_string) 
        @command_window.add_command("hoge", :symbol_string)
        # キャンセルされたときは、呼び出し元のシーンへ戻る
       @command_window.set_handler(:cancel, method(:return_scene))
        #[Scene_Base.return_scene] =>     [SceneManager.return]
    end
end


コードを比較してみると、RGSS3の方が断然短く、書きやすくなっていることがわかります。
RGSSでは、前の画面に戻る際にキャンセル(Bボタン)が押下されているかどうかの
判断が必要だったのですが、RGSS3ではキャンセルのイベントハンドラを設定することで、非常にシンプルな形となっているようです。

コードタイプ量が減ったのは良いことですね。