1.マップイベントとコモンイベント


RPGツクール2000から新たにコモンイベントが追加されました。
簡単に言えばマップの中だけで通用するのがマップイベントで、
どのマップでも共通して処理されるのがコモンイベントということですが、
マニュアルやヘルプに記載されていること以外にもいろいろと違いがあります。
そこでまずはコモンイベントについてさらっとおさらいして、
次にマップイベントとコモンイベントの数と処理速度の関係や
処理の仕方の違いについてみていきます。


目次

コモンイベントを使いこなそう
イベントの数と負荷の関係
イベント処理の違い


★コモンイベントを使いこなそう

コモンイベントの役割は主に2つあります。

1つはゲーム全体で何度でも呼び出して使うイベントを作りたい時に使います。
例えばセーブポイント、呪いを解いてくれる教会、
ランダムにアイテムが出てくる宝箱等、複数のマップで同じ処理を必要とする
イベントはコモンイベントで作って「イベントの呼び出し」で
呼び出すようにすると便利です。こういうのをマップイベントで作ると、
修正したい時に設置したイベント全部を開かなければなりませんが、
コモンイベントを呼び出すようにしておけば1個のイベントの修正で済みます。

もう1つは様々な状態を監視する役割です。
並列処理で歩数やプレイ時間を記録するとかスイッチアイテムの効果を作る
という場合にはコモンイベントが力を発揮してくれます。


さて、コモンイベントを使うときの注意点としてはまずイベントの一時消去ができません。
そしてコモンイベントで「定期的に並列処理」や「自動的にはじまる」を使うときは
出現条件にスイッチを指定するのが鉄則です。
特にオープニングの最初の自動処理をコモンイベントで作るのはもってのほかです。
「自動的にはじまる」で出現条件スイッチを指定しないのは
そのイベント一本で進めるような特殊なゲームを作るときに限られます。

それから主人公や乗り物以外のキャラを操作するのはなかなか厄介です。
まずイベントの指定に「このイベント」を使うと一発で強制終了します。
直接指定の場合でも特に場所移動後にイベントを指定するコマンドがあると
注意しないと「無効なイベントが〜」とエラーが出て終了します。
これ関連の失敗は私もよくやらかしてしまいます。気をつけましょう。



目次へ


★イベントの数と負荷の関係

一言に負荷といっても画面表示系の負荷とイベント処理の負荷では事情が違います。
画面表示系の負荷についてはコモンイベントだろうとマップイベントだろうと
空イベントが大量にあるだけでも処理落ちの原因になります。
試しにコモンイベントの最大数を変更して「呼び出されたときのみ」で空のイベントを
5000個作ってみてください。これだけでもかなり重くなるはずです。
(例えば主人公を操作しているとワープしたように飛び飛びに表示される)

でもイベント処理の負荷はちょっと違います。

次のような処理をいろいろな条件の下で走らせてみて、
ストップウォッチで処理が完了するまでの時間を計ってみました。

 ◆繰り返し処理
  ◆変数の操作:[0001]加算,1
  ◆条件分岐:変数[0001]が999999
   ◆繰り返し処理の中断
   ◆
  :分岐終了
  ◆
 :以上繰り返し

 ★条件
 a.コモンイベント100個(呼び出されたときのみ)
 b.1ページのマップイベント1個
 c.100ページのマップイベント1個(100ページ目の出現条件が満たされている)
 d.100ページのマップイベント1個(全ページの出現条件が満たされていない)
 e.1ページのマップイベント100個
 (どれも空イベントを置いてるだけ)


その結果…


   a:b:c:d:e=1:1:1:4:7(数字の大きい方が時間がかかる)


PC環境によっては違う結果になることもあると思います。
少なくともこの結果から言えることはコモンイベントの数は
イベントの処理時間に影響を与えていないということです。
試しにコモンイベントの数を5000個にしてみても差はありませんでした。
その点、マップイベントは数が多いほど処理を圧迫します。
イベント100個で処理時間が7倍になるというのですから
複雑なシステムを作るときには留意しなければなりません。

そしてc、dを比較してみると複数のページのあるイベントでは出現条件が
満たされたページより少ない数のページは無視されていることが分かります。
ということは呼び出しだけで使うようなサブルーチンは
1つのマップイベントにまとめて、最後に空のページで蓋をすれば良い
ということになります。



目次へ


★イベント処理の違い

マップイベントとコモンイベントでは処理の仕方にも微妙に違いがあります。
一番の違いは「定期的に並列処理」の処理の仕方です。
マップイベントでは「定期的に並列処理」でイベント内容に「ウエイト」があった場合、
「ウエイト」の実行中に他のイベントによって開始条件をOFFにされたなら、それ以後
の命令はキャンセルされて次に開始条件がONになった時にはイベントの最初から処理されます。
ところがコモンイベントの場合はウエイト処理中に開始条件をOFFにするとイベントの処理は
止まるのですが、次に開始条件をONにするとイベントの最初からではなく「ウエイト」
の続きから処理が継続されてしまいます。

簡単な実験をしてみましょう。
マップイベントとコモンイベントで開始条件をそれぞれ同じスイッチに指定し、
「定期的に並列処理」で次のような内容にします。

◆ウエイト:2.0秒
◆効果音の演奏

効果音は重なってもいいように質の違う短めの音を指定してください。
それから別のイベントで5秒ごとにスイッチのON,OFFを切り替えてみます。
もしも同じように処理されるのであれば2音は常に同時に鳴るはずなのですが…

………………

どうでしたか?
「タイミングの違いじゃない?」と疑う人は試しに同じことを2つのマップイベント、
もしくは2つのコモンイベントで実験して違いをみてください。

このようにマップイベントとコモンイベントでは処理に微妙な違いがあるわけです。
「ウエイト」を使うことで処理の滞る時間ができたために分かりやすいですが、
このことは「ウエイト」を使わずとも、処理に長い時間を要するもの凄く長いイベントでも
起こると考えられます。
(試しにイベントの途中に「繰り返し処理」を入れてみたところ、スイッチを切り替えても
 繰り返しから抜けられなくなりました。)


これを知らないと思わぬバグが発生する原因にもなり得ます。
そもそもこのコンテンツを立ち上げたのは別のサイトでこのことのために
重大なバグが発生している例を見かけたからです。
イベントの途中から処理されていることが分からなかったために
「そんなイベント作った覚えはないのになぁ…」
と思ってしまいバグの原因を突き止めるのが難しかった訳です。



基礎講座
第一回:RPGツクールでハローワールド(04' 4/10)
第二回:トラブル対処法(04' 4/17)
第三回:オープニングを作ろう(04' 4/24)

自作システム講座
第一回:マップイベントとコモンイベント(04' 1/10)
第二回:カーソル移動あれこれ(04' 1/10)
第三回:RPG式自作戦闘の下準備(スイッチ・変数の管理)(03' 6/15)
第四回:RPG式自作戦闘(行動順の決め方)(03' 6/15)
第五回:変数の値を画面上に表現(03' 7/6)
第六回:アイテムメニューを作る(04' 1/10)
講座一覧へ戻る
トップへ戻る



公開日時:03' 3/10 23:00
更新日時:04' 1/10 10:00
管理人:すっぴぃ ◆ADGYPSYxII