2007/5/20

ゆゆぽん☆退避/追越列車とか作っちゃうかMona-(15)−出発信号と出場ポイントを連動させる  VRMスクリプト禅問答
<<前回へ

順序が前後しますが、比較的わかりやすいものから片付けていきましょう。

クリックすると元のサイズで表示します

クリックすると元のサイズで表示します

上図は、それぞれ本線(追越線)/待避線から編成が出発する時点を示したものです。出発信号が緑になる(厳密に言えば“赤ではなくなる”)ことは、すなわち、その線を通過しようとする編成、あるいは出発しようとする編成に“このまま進んでも大丈夫だ”という意味でなければなりません。

これを実現するには、

・信号[閉A]=本線出発信号が緑になる(赤ではなくなる)と同時に、ポイント[出]を正位に切り替える。
・信号[出]=待避線出発信号が緑になると同時に、ポイント[出]を反位に切り替える。

ことが必要になります。

加えて、証明は省略しますが、ユーザーが故意にビュワーの画面操作でポイントを切り替えてしまうケースを除けば、[出]ポイントを切り替えるタイミングは、それぞれの信号が編成に進行を許可するタイミング以外あり得ません。つまり、本線/待避線出発信号が緑(黄)になるとき→ポイントが正/反位に切り替わるとき、は完全に一致します。

このような場合、これを別々に処理するのは面倒ですので、1つにまとめておいた方が何かと便利です。つまり、出発して良い、という判定処理から出発信号と出場ポイントの両方を操作するのではなく、出発信号を切り替えれば、同時にポイントも切り替わるようにしてしまう、ということです。このような考え方を、ボクは勝手に“連鎖メソッド”と呼んでいます。

[閉A]の信号機は、閉塞信号として扱っていますから、既に他の閉塞信号と同じスクリプトが書き込まれているはずです。この、信号を黄にするメソッド(MtdSignalY)と緑にするメソッド(MtdSignalG)のそれぞれに、出場ポイントを正位に切り替えるメソッド(MtdStraight)をcallする命令を書き加えましょう。

[出]の信号機は、信号機、センサー共にまだ何もスクリプトを書いていない状態のはずです。とりあえず、実現しなければならないことは以下の通りです。

・信号スクリプトに、緑にするメソッドMtdSignalGを用意する。
・MtdSignalGの中に、出場ポイントを反位に切り替えるメソッド(MtdTurnout)をcallする命令を書き加える。
・信号を赤にするメソッド(MtdSignalR)も作る。
・ビュワー起動時には、信号が赤になるようにする。
・[出]センサーを編成が踏んだら、信号が赤になるようにしておく。

後は、然るべきタイミングで信号を切り替えてやりさえすれば、いよいよ退避/追越列車が完成します。次回、その心臓部とも言うべき部分を解説します。

次回へ>>
0

コメントを書く

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




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