忍者ブログ
RPGツクールのブログです。イベント講座とRGSS3スクリプト配布をやってます♪
カウンター
ブログ内検索
アーカイブ
最新コメント
[04/04 NONAME]
[04/04 NONAME]
[04/04 NONAME]
[04/04 NONAME]
[04/04 NONAME]
プロフィール
バナー

HN:奈々(なな)
RPGツクールVXAceを中心に製作を行っています。 スクリプト、イラスト、ドット絵など広くちょこちょこ手を出していますので、 できる範囲で他のツクーラーさんのお手伝いができたらなと思っています。
イベントコマンドにある「スクリプト」は
基本的にスクリプトエディタにあるものと同じ働きを持っている。
(エディタにある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
お名前
タイトル
文字色
URL
コメント
パスワード
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
Copyright © へぷたなすくろーる All Rights Reserved
Powered by ニンジャブログ  Designed by ピンキー・ローン・ピッグ
忍者ブログ / [PR]