イベントコマンドにある「スクリプト」は
基本的にスクリプトエディタにあるものと同じ働きを持っている。
(エディタにあるGame_Interpreterクラスで実装しているので当然だが)
しかし使用上の注意点、というか特有の問題がある。
改行の位置レベル★
スクリプトは1行で1つの命令を行うというルールである。
エディタの方は幅の制限がないので良いが、イベントスクリプトの方は
ボックス幅を超えると自動改行されてしまう仕様となっている。
当然、これで変な位置で改行してしまうと機能しなくなる。
これを防ぐには行末に「\」(バックスラッシュ)を入れる方法があるが
これは「\」(エン)と混同しやすく、余りオススメはできない。
なので、=や+といった演算子の「後ろ」で改行するのが良い。
こうするとスクリプト側で判断して改行を無効にしてくれる。
ローカル変数(一時変数)の保持レベル★★
value = 100
value += 20
ローカル変数というものは、1つの処理の間だけ中身を保持しておく変数だ。
これはとても便利なので、素材の中でも多用するし
ちょっとした作例を出すときにも、主にループ処理や行幅調整で使う。
しかし、エディタの方だと1つのメソッド(def~)の間保持してくれるが
イベントスクリプトの場合は、1つのボックスの間だけしか保持しない。
しかも1ボックスには行数制限がある。
1つの処理の行数が長くなってしまい
複数のボックスに跨るようになってしまうと
無効になったローカル変数を呼び出したときにエラーが出る。
(
Game_InterpreterでNoMethodError)
なるべく1つのブロックで処理を完結させるようにし
ブロックを超えて引き継がせたいものは
変数($game_variables[n])などに一時代入すると良い。
クラスの違いレベル★★★
ある程度勘の良い人なら、同じスクリプトなんだし
エディタの方から処理を流用できると思いつくだろう。それは正しい。
しかし前述の通り、イベントスクリプトはGame_Interpreterクラスに属する。
それ以外のGame_ActorやGame_Mapから流用する場合は注意が必要だ。
$game_actors[1].hp = 100
というような「$で始まる変数」或いは「整数」は、どのクラスでも使える処理だ。
それから、前述の「ローカル変数」も同ブロック内なら使用可能だ。
self.hp = @mhp + mp
逆にそれ以外の変数は、そのクラス(とサブクラス)専用の処理になる。
Game_Interpreterクラスは完全に独立したクラスなので
基本的にこれらの変数が使えないと思って良い。
(やはり
Game_InterpreterでNoMethodErrorが出る)
そのため、全ての要素を「$○○」か「整数」か「ローカル変数」に置き換える必要がある。
[9回]
PR
-->