2005/11/7

お手軽自動信号機  VRMスクリプト禅問答
【怎麼生】
コレコレを読みましたが、ややこし過ぎてついていけません。また、VRM4第2号収録のスクロールはセンサーをたくさん置かなければならないので面倒です。もっと簡単に信号を遷移させる方法はありませんか。

【説破】 4.0.2.4
簡単にする、ということは、その機能に対してある程度の割りきりが必要であることは理解していますね。その上で、とにかく「列車が通過したら赤になり、その後で順に青になるだけ」で良いのであれば、信号機1つとセンサー1つで実現できます。


では、TOMIX三灯式信号機を使うことを例にサンプルコードを示しましょう。
[信号スクリプト]
//初期設定
call this MtdSignalG
//
//停止現示メソッド
//
BeginFunc MtdSignalR
SetSignal 1
EndFunc
//
//注意現示メソッド
//
BeginFunc MtdSignalY
SetSignal 3
EndFunc
//
//進行現示メソッド
//
BeginFunc MtdSignalG
SetSignal 6
EndFunc

[センサースクリプト]
//パートナー信号定義
VarSignal ObjPartnerSignal
get ObjPartnerSignal "{センサーに連動する信号名}"
//編成検知イベント設定
Var TimerID
Var EventID
SetEventSensor MtdControlSignal EventID
//
//編成検知=信号制御メソッド
//
BeginFunc MtdControlSignal
KillEvent TimerID
call ObjPartnerSignal MtdSignalR
SetEventAfter ObjPartnerSignal MtdSignalY TimerID 10000
SetEventAfter ObjPartnerSignal MtdSignalG TimerID 15000
EndFunc
コレコレと比べるとウソのようにシンプルですが、これが「割り切り」の結果です。この信号機&センサーは以下のような動作をします。

(1)編成がセンサーを通過したら信号が赤になる。
(2)その10秒後に信号が黄になる(1つ目のSetEvnetAfter命令)。
(3)その5秒後に信号が青になる(2つ目にSetEventAfter命令)。

これだけです。一方で、以下のことにはまったく考慮していません。

・どちらから編成が進入しても同じ動作をする。
・現在の信号の状態を外部から参照できない。
・編成がどんな速度で通過しても、信号通過中に停車しても、信号の動作はまったく同じである。

以上のことが気にならないのであれば、あるいは、以上のことが問題にならないような運転をする(たとえば線路を一方通行にする等)のであれば、とりあえずこれで手軽に自動遷移する信号機を楽しむことが出来ます。
四灯、五灯用を作りたいのであれば、信号スクリプト側にそれぞれ灯火色に対応するメソッドを追加し、合わせてセンサースクリプト側のSetEventAfter命令を増やしてください。信号遷移のタイミングが気に入らなければ、SetEvnetAfter命令の第4パラメータ(ミリ秒単位のメソッド実行までの時間)を調整してみてください。

注)本連載で示すVRM4スクリプトや物の考え方をあなたが採用した結果生じる全ての事象については、その責を負い兼ねます。私の書いたものを読むに際しては、常に「コイツは狂人で、でも一部は役に立つことも言っているかも知れない」という程度の心構えで臨んでください。
0

2007/1/4  20:27

投稿者:ghost
スクリプト会議室のやり取りを読んでいて誤字・脱字に気づいたので修正しました。

コメントを書く

この記事にはコメントを投稿できません




teacup.ブログ “AutoPage”
AutoPage最新お知らせ