と言えば、「SetEventAfter」なんですが、相変わらずトラブルを起こし易い厄介者です。
この前も機回しで、編成停車直後に機関車が分離するのがイマイチだったので、「SetEventAfter」で少し待ち時間を設定したのですが、そうするとその後のASCセンサーが動作しない状態になりました。分離後に「KillAllEvent」が実行されるので問題ないだろうと思っていたんですが、そうではなくAfterEventIDは「KillEvent」で削除しなくてはならなかったです。解放前と解放後だと「KillAllEvent」の対象範囲が変わるのかもしれません。
まぁ、「SetEventAfter」でトラブルが起きれば「KillEvent」で削除すれば大体は良いんですが、「SetEventAfter」を使って待ち時間設定を最初から大量に使うと訳がわからなくなるので、スクリプト構築初期段階では「SetEventAfter」を使わないことが得策だろうと思っています。
---*---*---*---
さて、そんなことよりも「SetEventAfter」で気に入らない点は、
SetEventAfter <オブジェクト参照> <メソッド> <イベントID変数> <時間>
において、時間に変数が使えないこと。今回の「VRM4CV標準化スクリプト構想」では、各駅毎に停車時間の設定を変更したりしたかったので、「SetEventAfter」ではメソッド内を変更しなくてはならず、それが結構扱いづらいし、見づらいのです。そこで作ってしまいましたわ。
//変数宣言
Var VarDelayTime
Var VarStartTime
Var TimerEventID
Var KeyEventID
//スタート
//遅延時間(ミリ秒)
set VarDelayTime 10000
SetEventKey this MethodDelayTime KeyEventID 1
//メソッド
//遅延時間メソッド
BeginFunc MethodDelayTime
GetSystemTime VarStartTime
SetEventTimer this MethodDelayTime2 TimerEventID 100
EndFunc
BeginFunc MethodDelayTime2
Var VarEndTime
GetSystemTime VarEndTime
sub VarEndTime VarStartTime
if>= VarEndTime VarDelayTime
KillEvent TimerEventID
call this MethodDelayTime3
endif
EndFunc
BeginFunc MethodDelayTime3
DrawMessage "10秒経過"
EndFunc
(2009/03/06:黄色部分入換え)
これをレイアウトでも編成でも何でもよいのでコピペして「1」キーを押せば10秒後にメッセージが出ます。
「VRM4CV標準化編成」は、このメソッドを使って停車駅(厳密にはASCセンサー)から停車時間を受け取って停車しています。