イベントコマンド仕様
§ 多重のイベントの呼び出しの有効数
1000回まで可能です。これ以上はエラーとなり、ツクールが強制終了されてしまいます。
※イベントの呼び出し元は含みません。
このエラーは、イベントが自分自身を呼び出す(再帰)ようなイベントを作る場合に、起こりやすいので、ご注意くださいませ。また、指定位置のイベントを実行の指定位置に呼び出し元のイベントがあると、結果的に自分自身を呼び出すことになりますので、同様に注意が必要です。
§ 条件分岐のネスト限界
恐らく無限にネストできるでしょう。10000回以上まで確認しました。
普通は、そこまで行くことはないと思いますけど、分岐に限らず大量のコマンドがあると、編集時にひどく重くなります。この場合は、メモリを200MB程消費していました。
ネストとは一連の処理をグループ化するようなコマンド(のグループ)の中に、またそのようなコマンドを入れるようなことを指します。(イベントコマンド, ツクールに限りません。) 条件分岐の他に繰り返し処理もネストできます。
ツクール2000の画面仕様上、ネストの階層が深くなると、イベント実行内容
の表示領域に表示できないほど右に寄せられてしまいます。
§ ウェイト0.0秒の値
1/60秒です。
いくつかのサイトでは、1/30秒や1/24などと説明されています。 しかし、これらは誤りです。テストイベントを作って確かめてみて下さい。
ただし並列処理の場合は、イベントが1回終了する毎に1/60秒のウェイトが発生します。より正確には、1/60秒毎にイベントが実行されます。
この上、さらに0.0秒ウェイトを入れると、合計、2/60 = 1/30秒のウェイトになります。(上記の間違いもこれが原因かもしれません。)
また、自動開始イベントの場合はちょっと特殊で、ウェイトが一切なければ自動的に1/60秒ウェイトが発生し、もしあればそちらのウェイトのみ発生します。(実際には、処理の関係上、ごくわずかな誤差が発生するようです。)
詳しくはイベントの処理手順をご参照くださいませ。
なるべく正確に測るには、繰り返し処理の代わりにラベルの設定~指定ラベルへ飛ぶを使うと良いです。(2倍ほど処理が軽いようです。) 互換機種上で(Windowsエミュレータ上などを使わず)、実時間を元に動いている(タイマを誤魔化すなどしない)限り、処理内容に差はないはずです。また、処理落ちしたとしても、ウェイトには影響しないようです。
§ イベントの処理単位
イベントコマンド | ツクール上での実行時間(step) ※1 |
---|---|
顔グラフィックの設定 | 1 ※2 |
スイッチの操作 | 1(コマンド1回につき) |
変数の操作 | 1(コマンド1回につき) |
主人公の歩行グラフィック変更: 設定, パーティ外 | 1 ※2 |
主人公の顔グラフィック変更: 設定, パーティ外 | 1 ※2 |
システムBGMの変更 | 1 |
システム効果音の変更 | 1 ※2 |
システムグラフィックの変更 | 測定不能 ※3 |
システムグラフィックの変更 | 測定不能 ※3 |
画面の消去: 瞬間消去 | 1 |
画面の消去: 上記以外 | イベントが停止するので測定不能 |
画面の表示 | 測定不能 ※3 |
ピクチャーの表示 | 測定不能 ※3 |
ピクチャーの移動, ピクチャーの消去 | 1 |
BGMの演奏, 記憶したBGMの演奏 | 測定不能 ※3 |
現在のBGMの記憶 | 1 |
効果音の演奏 | 1 ※2 |
繰り返し処理: 開始 | 1 |
繰り返し処理: 繰り返し毎 | 2 |
繰り返し処理の中断 | 1 |
指定動作の全実行 ※4 | 1 |
イベントの呼び出し ※5 | 2 ※3 |
注釈 | 1 |
条件分岐の評価: 条件に当てはまった場合 | 1 ※6 |
条件分岐の評価: 条件に当てはまらなかった場合 | 2 ※6 |
条件分岐の終了: 条件に当てはまった場合(「条件に・・・」にチェックしない) | 2 ※6 |
条件分岐の終了: 条件に当てはまった場合(「条件に・・・」にチェックする) | 3 ※6 |
条件分岐の終了: 条件に当てはまらなかった場合(=それ以外の場合) | 2 ※6 |
ラベルの設定, 指定ラベルへ飛ぶ | 1 ※7 |
文章の表示, 選択肢, 数値入力, 戦闘, お店, 宿屋, 名前入力, 場所移動, 記憶した場所へ移動, ウェイト, ムービーの再生, セーブ画面の呼び出し, メニュー画面の呼び出し | イベントが停止するので測定不能 |
イベントの一時消去, ゲームオーバー, タイトル画面に戻す | イベントが終了するので測定不能 |
イベントの処理終了時間(コマンドではありません), イベント処理の中断 | 0 ※8 |
その他 | 1 |
- 1.1step = 1/10000frame = 1/600000秒。step, frameは便宜上の単位。あくまで処理単位であり、実際の時間とは必ずしも一致しない。
- 2.一定条件で負荷が大きくなる。
- 3.負荷が大きい
- 4.動作指定が空の場合
- 5.空のイベントを呼び出して戻ってくるまでの時間。
- 6.ラベルで飛ばすことも可能。
- 7.どちらか一方だけでも、両方あっても変わらない。
- 8.終了時に特別stepが発生するわけではない。
タイマー、あるいはウェイトを他のイベントで並列実行し、1秒間繰り返しました。カウントの為の変数の操作、繰り返す為のラベル間移動の処理も考慮しています。
コマンドの時間を計る側のイベントにはウェイトを設定していないので、イベントコマンドによってはかなりの負荷がかかります。
これらの結果により、ひとつのイベントは1/600000秒単位で実行されることが分かります。(正確には、1frame毎に10000stepのイベントが処理されます。)環境によって変わると思いましたけど、ツクール側が実際の時間に同期を取って処理しているようです。よって、イベントの最小単位を1step = 1/600000秒と致しました。
少なくともツクール側の時間にはCPUの影響はないようですけど、負荷は処理に見合った分だけかかり、実時間に合わせられなくなってしまうと処理落ちしてしまったり、ひどい場合にはフリーズしてしまうこともあるので注意が必要です。
スイッチ・変数の操作は、1回のコマンドでいくつ一括操作しても処理に使われる時間はかかりませんが、操作対象が増えれば当然負荷がかかります。 さらに、画像やサウンドのファイルにアクセスするコマンドやイベントの呼び出しコマンドは非常に負荷が大きいので、1frame中に何度も実行するのは避けた方が無難でしょう。
ちなみに、注釈にも実行時間が存在します。
§ 制御文字のネスト
"\s[
"(文章の表示速度の変更), "\c[
" (文字色の変更) の2つの制御文字は、数値に変数を指定することが可能です。
具体的には、"\s[
" のように記述します。\v[1]
]変数1のスピードで表示
変数が制御文字の規定の値の範囲外の場合、
- "
\s[
" では、1以下は1、20以上は20として、n ] - "
\c[
" では範囲外の数値は全て0としてn ]
判断されます。(直接数値を記述しても同じ)
※RPGツクール2000VALUE!, 及び修正パッチ1.50以降が適用されたものについては、
"\n[
"
といった組み合わせも可能になります。\v[n]
]
§ 主人公名に制御文字
主人公の名前に制御文字 "\c[
" を使用しても、メニュー上の名前の色を変更することは出来ません。
しかし、文章を表示コマンドでその主人公の名前を表示(\n[
)すると、制御文字の効果が現れます。
これは "\>
" 等でも効果があります。
"\n[
", "\v[
" の効果は現れないようです。
§ エラー無効なイベントの呼び出し
良く発生するエラーに無効なイベントの呼び出し
があります。
主に、イベントの呼び出しコマンドを変数で指定するときに起こりますが、 それ以外にも発生することがあります。
以下に例を記します。
- イベントの呼び出し, キャラクターの動作指定など (以下各種コマンド)で存在しないイベントを対象にする
-
単純に、イベントが存在しないので無効になります。
- コモンイベントの各種コマンドで対象に「このイベント」を指定
-
「このイベント」はマップイベントにのみ有効です。
- 一つのイベント内で、場所移動後に各種コマンドの対象に「このイベント」を指定
-
場所移動すると、たとえ同じマップ内であっても 恐らくイベントが読み込み直されるので、「このイベント」は無効になるのでしょう。
- マップイベント(並列処理は除く)でイベントを呼び出し
- 呼び出し先のイベントで場所移動
-
移動先には呼び出しもとのイベント(「このイベント」)が存在しないので、 呼び出し先のイベント処理を抜けるとエラーになります。
但し、並列処理のマップイベントはマップを移動した時点で終了するので、エラーにはなりません。 (バグの原因にはなるかもしれません。)
Copyleft -- aeris 2001/2004, All rights reversed.
このサイトの全ての内容は、日本の著作権法、及び国際条約に保護されています。
管理者が作成したもののうち特に明記されていないものについては、 GNU GPL, LGPL, FDL, CCPL-jp by-saのいずれかのCopyleftライセンスの元で公開されます。