【PRO_001:◆並列イベントと自動イベントの使い方を詳しく知りたい】


【目標】

イベントの起動条件のうち、自動実行と並列実行は、
「条件が満たされた時点で実行され、条件が変わるまで実行され続ける」
という性質を持ちます。

ここではそれぞれ、自動実行の開始条件を持ったイベントを「自動イベント」、
並列実行の開始条件を持ったイベントを「並列イベント」と呼ぶことにします。

自動イベントが実行中の場合では「並列イベント」以外の他の開始条件イベント
(決定キーで実行、プレイヤー接触、イベント接触、自動実行)は起動できませんが、
並列イベントが実行中の場合では「並列イベント」を含む全ての開始条件イベントが
起動できるという違いがあります。

自動イベントと並列イベントの使い方がわかることで、
ゲームにシーンイベントを挟んだり、探索イベント中にギミックを仕掛けたりすることができます。
また、戦闘システムやメッセージ表示など自作をする際には避けては通れない内容でもあります。

今回は「ダンジョンに入るとタイマーが起動され時間が来ると外に出てしまう機能」
というものを作成し、自動イベントと並列イベントについて、
基本的な使い方を習得することを目標とします。


【手順】
【1】今回作る機能に必要なもの

今回のイベント作成では2つの通常変数と、
3つのページを持つ新規のイベント「タイマーイベント」、
既存のイベント「入口場所移動」が関係します。

■■■通常変数■■■
■イベント管理フラグ 3つのイベントの状態を管理する変数です。下記のように決めておきます。
  • 0:タイマーが起動されていない状態です。
    この状態でダンジョンに入った際にタイマー開始イベントが起動されます。
  • 1:タイマーが起動されている状態です。
    この状態ではタイマー変数が増加していきます。
  • 2:タイマーが指定の値に達した状態です。
    この状態になるとタイマーが停止し、タイマー終了イベントが起動します。
■タイマー変数 1フレーム(デフォルトの設定では1/60秒です)毎に1ずつ増加していく変数です。
この値が1800(30秒)になった時点で、「イベント管理フラグ」を2(タイマー終了)状態にします。

■■■タイマーイベント■■■
ダンジョン内に設置される、タイマー処理のメインイベントです。
■ページ1:タイマー開始イベント
自動実行の、プレイヤーにタイマーが開始されたことを伝えるイベントです。
メッセージ表示の後、タイマーを起動します。
■ページ2:タイマー処理イベント
並列実行の、タイマー変数を増加させるイベントです。
また、タイマー変数を増加させた後に、その値が1800(30秒)以上になったかどうかを判定し、
タイマー終了イベントを呼ぶかどうかを判断します。
■ページ3:タイマー終了イベント
自動実行の、プレイヤーに時間切れを伝えるイベントです。
メッセージ表示の後、主人公をダンジョンの外に場所移動して、
タイマーの実行状態(=イベント管理フラグ)を初期状態(=0)に戻します。

■■■入口場所移動■■■
既に設置されているダンジョンからサンプルマップAへの移動イベントです。
■ページ1:サンプルマップAへ移動
セーブを許可し、サンプルマップAへ移動するコマンドが既に入力されています。
今回はここにタイマーイベントの途中でダンジョンから抜けた場合のリセット処理を追加します。

【2】機能の作成
■通常変数の作成
システムデータベースより、タイプ14:「通常変数名」を開きます。
ID:1に「イベント管理フラグ」、ID:2に「タイマー変数」を設定します。

■タイマーイベントの作成
マップ3「ダンジョンの」座標(0,0)(左上)に新規イベントを作成します。
イベントの名前を「タイマーイベント」にし、グラフィックは「指定無し」に設定します。
■ページ1:タイマー開始イベントの作成
(1)イベント起動条件の設定
イベントページが「ページ1」になっていることを確認します。
起動条件を「自動実行」として、
「v1:イベント管理フラグ」が「0」と「同じ」時に実行するように設定します。
(2)ピクチャ表示
コマンド「A ピクチャ」より、ピクチャ番号1番、
ピクチャを文字列として描画、文字列「\v[2]」として
ピクチャ表示を設定します。

※タイマー変数の中身を画面に表示しています。
(3)文章の表示 @コマンド「1 文章の表示」より、下記メッセージを設定します。

-----
※タイマーを開始します。
ウルファール達はこのダンジョンに
30秒以上いられないようだ。
-----

※プレイヤーにタイマーが開始されたことを伝えるメッセージを表示します。
(4)変数操作:V1[イベント管理フラグ]
@下記のように変数操作を設定します。

V1:イベント管理フラグ、=、1

※イベント管理フラグを1にしてタイマーを開始します。
(5)変数操作:V2[タイマー変数]
@下記のように変数操作を設定します。

V2:タイマー変数、=、0

※タイマー変数の値を0にして、始めの状態にセット(=初期化)しています。
■ページ2:タイマー処理イベントの作成
(1)イベント起動条件の設定
イベントページが「ページ2」になっていることを確認します。
起動条件を「並列実行」として、
「v1:イベント管理フラグ」が「1」と「同じ」時に実行するように設定します。
(2)変数操作:V2[タイマー変数]
@下記のように変数操作を設定します。

V2:タイマー変数、+=、1

※イベントが呼ばれるたびに、タイマー変数の値を1ずつ増やしています。
(3)ピクチャ表示
@下記ピクチャの表示設定をします。

ピクチャ番号1番、ピクチャを文字列として描画、文字列「\v[2]」

※イベントが呼ばれるたびに、タイマー変数の値を表示しなおしています。
(4)条件分岐(変数)
@下記のように条件分岐を設定します。

「V2:タイマー変数」が「1800」「以上」のとき

※タイマー変数の値を見て、フラグ変更の処理をするかどうかを判断しています。
数直線を思い浮かべて、条件を自然な形で設定するとよいでしょう。
(5)変数操作:V1[イベント管理フラグ]
@上記で設定した条件分岐内に、下記のように変数操作を設定します。

V1:イベント管理フラグ、=、2

※イベント管理フラグを2にしてタイマーを終了します。
■ページ3:タイマー終了イベントの作成
(1)イベント起動条件の設定
イベントページが「ページ1」になっていることを確認します。
起動条件を「自動実行」として、
「v1:イベント管理フラグ」が「2」と「同じ」時に実行するように設定します。
(2)文章の表示
@下記メッセージを設定します。

-----
※タイマーを終了します。
30秒経ち、ウルファール達は
ダンジョンの入り口に飛ばされてしまった。
-----

※プレイヤーにタイマーが終了されたことを伝えるメッセージを表示します。
(3)ピクチャ消去
@下記ピクチャの表示設定をします。

ピクチャ番号1番

※タイマー変数を表示しているピクチャを消去しています。
(4)場所移動
@下記のように場所移動を設定します。

対象:主人公
移動先マップ:1、サンプルマップA
移動先位置:X:34、Y:12
場所移動時オプション:トランジションを行う [暗転有り・遅い]

※プレイヤーダンジョンの入り口に移動します。
(5)変数操作:V1[イベント管理フラグ]
@下記のように変数操作を設定します。

V1:イベント管理フラグ、=、0

※イベント管理フラグの値を0にして、始めの状態にセット(=初期化)しています。
(6)変数操作:V2[タイマー変数]
@下記のように変数操作を設定します。

V2:タイマー変数、=、0

※タイマー変数の値を0にして、始めの状態にセット(=初期化)しています。

■入口場所移動の変更
(1)ピクチャ消去
下記ピクチャの表示設定をします。

ピクチャ番号1番

※タイマー変数を表示しているピクチャを消去しています。
(2)変数操作:V1[イベント管理フラグ]
下記のように変数操作を設定します。

V1:イベント管理フラグ、=、0

※イベント管理フラグの値を0にして、始めの状態にセット(=初期化)しています。
(3)変数操作:V2[タイマー変数]
下記のように変数操作を設定します。

V2:タイマー変数、=、0

※タイマー変数の値を0にして、始めの状態にセット(=初期化)しています。

■動作の確認
1.テストプレイをして動作を確認します。
確認のポイントは下記の通りです。

(1)タイマー開始
・ダンジョンに移動した直後に、タイマー開始のメッセージが表示されること。

(2)タイマー処理
・左上に「タイマー変数」の値が表示され、増加していること。

(3)タイマー終了 ・左上の数字が1800になった時にタイマー終了のメッセージが表示され、
主人公がダンジョンの入り口に移動すること。

上手く行かなかったときは設定内容を再度確認してみてください。
処理の流れを一つずつ追いかけて、落ち着いて設定しましょう。

【余談】
本当に30秒?

実は正確に30秒とは言えないかもしれません。
ゲームのタイトルバーの情報を変更してみると、実際にゲームがいくらのFPSで動作しているかを確認できます。
FPS(Frames Per Second)とは1秒当たりいくつのフレーム(コマ)が処理されているかという値です。

ちょっと雑な言い方になってしまいますが、
WOLF RPGエディターは凄く高速なパラパラマンガ(!)をやっていることになります。
並列処理が起動されるのはパラパラマンガの1コマの単位(1/60秒に1回)で、
1回呼び出される毎にタイマー変数を数える(+1する)、1800まで数えたらフラグを立てる、
というのが今回のイベントの仕掛けになります。

並列イベントをいくつも起動したりすると処理内容によっては
期待通りのコマ送りスピードが出なくて30秒より長くなってしまうことがありますが、
今回の処理のような小規模な並列イベントの場合はほとんど気にしなくてもよいでしょう。


タイマーイベント実行時に気をつけることは?

複数のイベントにわたる処理がある時にはどのような場合もそうですが、
イベントの終了条件を気にする必要があります。

タイマーイベントの途中で別の場所に移動したりする場合は、
イベントを途中で終了する処理を入れないと、移動先にタイマー変数のピクチャ表示が残ったり、
値がリセットされないまま残ってしまったりします。
自由に町に戻れるようなワープの魔法のような機能を作っている場合は要注意です。

今回のサンプルゲームの場合は、
既存のイベント「入口場所移動」にタイマーをリセットする処理を入れないと
不具合が発生してしまいます。


参考トピック

今回のイベント作成の参考になるトピックをまとめました。


<執筆者:ウディタ公式ガイド執筆コミュ。>


【改訂履歴】
 Ver1.00 2013/11/23 新規作成

【←にフレームが表示されていない方はここをクリック】