RPGツクールVX Ace - RGSS3メモ1
間を置くたびに忘れるのでメモ。とりあえずシーンを呼び、その中でウィンドウを使用してアレコレできる状態を目指す。
ゲーム内コマンド「スクリプト」から子のシーンを呼ぶ
SceneManager.call(Scene_xxx);
※newを付ける必要はない。クラスを渡すと内部でnewされる。
子のシーンから親のシーンに戻る
子のシーン内で、
SceneManager.return
を呼ぶ。
シーンを作る
タイトル、メニュー、マップ、戦闘、ゲーム内で使用されるあらゆるシーンはScene_Baseを継承したクラスで作られてる。Scene_Baseを継承したクラスを、SceneManagerから呼ぶとそのシーンを呼ぶことができる。
Scene_Baseの構成
SceneManager.callすると以下の順で呼ばれる。何の為にpost_startとpre_terminateがあるのかはいまんところよーわからん。
start
開始メソッド。
post_start
開始後(post)メソッド。
update
更新メソッド。シーンが有効な間、このメソッドが呼ばれ続ける。シーン内でSceneManager.returnが呼ばれるとpre_terminate、terminateが呼ばれ、親のシーンに復帰する。
pre_terminate
終了前(pre)メソッド。
terminate
終了メソッド。
ウィンドウの更新
ウィンドウがどのように更新されているか。
- Scene_Baseで毎フレーム呼ばれるupdateはupdate_basicを呼んでいる。
- update_basic内では表示の更新、入力の更新、ウィンドウの更新が行われている。
- まずそのインスタンス内に存在するインスタンスを全て呼び、それがWindowクラスを継承したクラスのインスタンスならupdateを呼ぶ。
なのでWindowクラスを継承したクラスのインスタンスをそのシーン内で生成すると、それだけでそのインスタンスのupdateが呼ばれるみたい。
- instance_variables → そのインスタンスが所有しているインスタンスの名前を全て返す。
- instance_variables.each → instance_variablesの戻り値をループで処理する。
- instance_variable_get → 指定した名前のインスタンスを返す。
- is_a?(***) → 指定されたクラス、またはそのサブクラスか否かを判定する。
※インスタンスを代入する変数はメンバ変数(@)でないと駄目。ローカル変数だと更新処理の対象にならない。