イベント
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が入ります。