イベント

1)イベントハンドラ

イベントとは、ユーザーからのアクション(ボタンを押した等)やシステム側からのアクション(音声を最後まで再生した等)を指します。

イベントが発生すると、そのイベントに対応したヘッダが呼び出されます。
このヘッダのことをイベントハンドラと呼びます。

イベントハンドラの書式は以下の通りです。

書式 : #[obj].[event]

obj
対象オブジェクト
event
イベントの種類

対象オブジェクトは、イベント対象のオブジェクトです。
例えば、BUTTONオブジェクトのbtnというオブジェクトがあった場合、このボタンに対するイベントハンドラは#btn.から始まるヘッダ名となります。

【ご注意下さい】

  • オブジェクト名にバンク指定は使用できません。#btn1[1].PUSH_L というイベントは動作しません。
  • イベントハンドラ内では wait コマンドを使用することは出来ません。

イベントの種類

イベントの種類は対象オブジェクトによって異なります。

BUTTON

FOCUS
マウスカーソルが上に乗った
UNFOCUS
マウスカーソルがボタン上から離れた
PUSH_L
左クリックされた(決定ボタンが押された)
PUSH_R
右クリックされた(キャンセルボタンが押された)
RELEASE_L
決定ボタンが離された
RELEASE_R
キャンセルボタンが離された

SOUND

PLAY
再生が開始された
STOP
再生が停止された(最後まで再生された)

SNDTABLE

PLAY
再生が開始された
STOP
再生が停止された(最後まで再生された)
NEXT
リストが次の曲に移行した
REV
リストが前の曲に移行した

例 : BUTTONオブジェクト [btn] のイベントハンドラ

// ボタンの上にカーソルが乗った時に呼ばれるヘッダ
#btn.FOCUS
	@ setid 1	// ボタンをアクティブ状態に変更
	se load se803
	se play 1	// ボタンの上にカーソルが乗った時の効果音を再生

// ボタンの上からカーソルが離れた時に呼ばれるヘッダ
#btn.UNFOCUS
	@ setid 0	// ボタンを通常状態に変更

// ボタンの上で決定ボタンが押された時に呼ばれるヘッダ
#btn.PUSH_L
	se load se803
	se play 1	// 決定ボタンが押された効果音を再生
	next NEXTACT	// NEXTACTヘッダに移行
		

上記例のFOCUSハンドラ及びUNFOCUSハンドラ内で使用されている[@]という名前のオブジェクトは、イベントが発生したオブジェクト名です。
詳細は下記『イベントハンドラ内の[@]について』を参照してください。

2)イベントハンドラ内の[@]について

シーンスクリプトと同様、画面スクリプトでも現在値として[@]が使用できます。
イベントハンドラ内での[@]は更に特殊な内容を持ちます。

イベント対象オブジェクト

オブジェクトコマンドのオブジェクト名として使用すると、イベント対象となったオブジェクトとして処理されます。 これは複数バンクを持つオブジェクトの時、どのバンクのオブジェクトに対してイベントが発生したかを意識することなく記述する事ができます。

#DEFINE
	// ボタンオブジェクトを6個作成
	BUTTON	btn[6]

	// このオブジェクトのイベントハンドラ
#btn.PUSH_L
	@ setid 2
		

上記例で2番目のボタン(btn[1])が押された場合、[@ setid 2]は[btn[1] setid 2]として処理されます。
同様に4番目のボタン(btn[3])が押された場合、[@ setid 2]は[btn[3] setid 2]として処理されます。

イベント対象オブジェクトのバンクNo

計算式の中で@が使用された場合、イベント対象となったオブジェクトのバンクNoとして処理されます。
主に、特定のバンクのみ特殊な処理を行いたい場合に使用します。

#DEFINE
	// ボタンオブジェクトを6個作成
	BUTTON	btn[6]

	// このオブジェクトのイベントハンドラ
#btn.PUSH_L
	if (@ == 3)
		@ setid 4
	else
		@ setid 2
	endif
		

上記例で4番目(btn[3])が押された時、[if (@ == 3)]は[if (3 == 3)]と処理されます。
イベント対象オブジェクトとして指定されている[@ setid 4]は[btn[3] setid 4]となります。

3)デフォルトイベントハンドラ

通常、オブジェクトに対してのイベントを受け取るのはそのオブジェクトのイベントハンドラですが、この他にユーザー側で受け取り名を指定することができます。
これをデフォルトイベントハンドラといいます。

デフォルトイベントハンドラは、オブジェクトの初期化にて指定します。

例 : デフォルトイベントハンドラの指定

#DEFINE
	BUTTON	btn1
	BUTTON	btn2

// DEFAULT でデフォルトイベントハンドラを指定する
#OBJECT	DEFAULT
btn1	defbtn
btn2	defbtn

#defbtn.PUSH_L
	@ setid 2
		

上記例の場合、btn1、btn2のどちらのボタンが押されても defbtn.PUSH が呼び出されます。
このように、違うオブジェクトで共通のイベントハンドラが指定できます。

また、デフォルトイベントハンドラとイベントハンドラが記述されている場合、[デフォルトイベントハンドラ]→[イベントハンドラ]という順で呼び出されます。

例 : デフォルトイベントハンドラとイベントハンドラの指定

#DEFINE
	BUTTON	btn1

#OBJECT	DEFAULT
btn1	defbtn

#defbtn.PUSH_L
	$100 = 10

#btn1.PUSH_L
	$100 = 0
		

上記例の場合、まず defbtn.PUSH_L が呼ばれ、次に btn1.PUSH_L が呼び出されます。
結果、btn1ボタンが押された時、$100には0が入ります。