(1)キーイベントが呼び出すメソッドの中で、自分が動作すべきかどうかを判断させる。
(2)ビュワー起動時にキーイベントを登録したままにせず、必要に応じて登録/解除をおこなう。
[編成スクリプト]このケースの場合、GetCurrentSpeed命令と、後に続くifzero命令が、キーイベントに紐付いた「出発メソッド」が動作すべきか否かの条件判断になっています。つまり、速度が0Km/hでないとメソッドMtdDepartureが実行されない、という具合に。
//キーイベント設定
Var KeyIDs
SetEventKey this MtdPushS KeyIDs s
//
//sキーが押されたら実行されるメソッド
//
BeginFunc MtdPushS
Var Tmp
GetCurrentSpeed Tmp
ifzero Tmp
call this MtdDeparture
endif
EndFunc
//
//出発メソッド
//
BeginFunc MtdDeparture
//ここに出発のためのスクリプトを書く
EndFunc
[編成スクリプト]上掲のサンプルコードは、[s]キーを押すと編成が少しだけ前進して止まる、というものです。もう1度[s]キーを押しても同じことはおこりません。そして、編成がセンサーに到ると編成は停止し、sキーの機能が再び有効になります。
//キーイベント管理変数
Var KeyIDs
//初期設定
call this MtdSetPushS
//
//キーイベント設定メソッド
//
BeginFunc MtdSetPushS
SetEventKey this MtdGoandStop KeyIDs s
EndFunc
//
//少し前進するメソッド
//
BeginFunc MtdGoandStop
Var TimerID
KillEvent KeyIDs //イベントを削除してしまう
SetTimerVoltage 0.1 3000
SetEventAfter this MtdGoandStop2 TimerID 5000
EndFunc
//
//停車するメソッド
//
BeginFunc MtdGoandStop2
SetTimerVoltage 0.0 3000
EndFunc
[センサースクリプト]
//編成検知イベント設定
Var EventID
SetEventSensor MtdSenseTrain EventID
//
//編成検知イベント
//
BeginFunc MtdSenseTrain
Var TimerID
VarTrain ObjTrain
GetSenseTrain ObjTrain
call ObjTrain MtdGoandStop2 //3秒後に編成は速度0に
SetEventAfter ObjTrain MtdSetPushS TimerID 5000 //5秒後にキーイベントを再設定
EndFunc
1. キーイベントの設定(SetEventKey命令)をメソッドでおこなう。これは必須ではないが、外部から再設定する際に便利。
2. キーイベントが実行するメソッドの内部でそのイベント自身を無効化(KillEvent命令)する。これにより、キーイベントの意図しない再実行が防止される。
3. 再びキーイベントを設定したい条件(上掲サンプルでは編成がセンサーを踏んで停止すること)が整った時点でキーイベント設定メソッドをcallする。