« T644~踏切始動 | トップページ | T644~湖畔 »

2006/11/15

T644~警報機の鼓動

T644_Xing11.jpg

▲「止まれ」の標識と街灯で肝心の警報機が見えんがね、あれぇ~???

えっと‥‥‥さて、踏切警報機をちゃんと鳴るようにしましょう。スクリプトについては、ウィザードとかコードビルダーとかあるんで、適当にやれば何かが書けます(;^^) まあ、それらが吐いたコードを自分なりに再構成してやるって感じですかね。ビルダーとか出来たおかげでタイプミスが基本的になくなったのは助かります。BeginFuncも綴りに自信がないのでビルダーで書いていますよ。で、今日は、それより大事なことを3点ほど‥‥‥。

踏切の挙動についてはいろいろあるんですが、一番の問題は遮断機を上げ下ろしするタイミングでしょうか。このうち、上げる方については、マニュアル(PDFのやつね)を改めて読み返すと「SetSensorMode」なる命令があって、曰く『退出側を最後尾車両で検出するように設定すると、スムーズな連動が容易に実現できます』‥‥‥こんなのいつ追加されたんだ? 全然知らなかったぞ。やっぱりマニュアルはちゃんと読まなあかんなぁ。ちなみに、ウィザードにも、いつの間にかにこれに対応したものがありました。一方、下ろす方は、センサを適当な距離だけ離して置くことにしました。実際の鉄道でも基本的には、踏切制御子という一種のセンサを用いて、その速度に関係なく列車が一定距離まで近づいたら警報機が鳴るようになっています(だから必要以上に待たされるのよね)。まあ、最近は列車の種別を判断したり、中央制御したりもしているようですが、T644はローカル線なのでそんな高尚な機能はないのでした。

その一方、T644レイアウトは単線で列車は双方向に走りますから、センサでこれを区別する必要があります。つまり、踏切の手前に遮断機を下ろすためのセンサを置いたとすると、踏切に進入する方向では働いてくれて、踏切から退出する向きだと動作しないようにしないといけません。これに対応するには「GetDirection」で得た変数をif分で判断してやればいいでしょう。で、その変数にどういった値が返ってくるかですが、踏切の開閉が 1 か 2 だから同じだと思っていたら、どうも違う‥‥‥それなら、0 か 1 か? これも違うようで全然うまくいきません。しょうがないからマニュアルを見ると『列車の現在の進行方向を取得します。-1または1が変数に代入されます』‥‥‥なんじゃそりゃあっ!? マイナス1って、どこからきた発想だ?

そんなこんなで、やっとまともに動くかな、と思ったら、その -1 か 1 かの判定基準がどうもよく分からない。例えば、踏切に左から進入する列車に対して「GetDirection」で得た変数は、センサごとに -1 だったり 1 だったり無茶苦茶なんですよ。どうやら、編成エディタで設定した列車の向きは関係無いようです。ここで、ハッと思い当たりました。ひょっとしたら‥‥‥レイアウトで実験してみたところ、案の定、「列車の進行方向はレールに対する向きで判断される」のでした。つまり、レールの基準点に向かう方が 1 で、反対方向が -1 です。レイアウトによってレールの向きがバラバラに敷設されていると、列車が一方向に走っていてもレールごとに 1 か返ってくるか -1 が返ってくるかバラバラって訳なのです。ふふん、どうせそんなことだと思っていたよ。

「-1」とか「レールに対する向き」とかは、開発側の都合ですね。分からんでもないです。私がゲームをやる時は、そのアルゴリズムを推測するとか、開発者の手の内を読むとか、げど~な方法で攻略するんですが、それと同じですね。高がVRMスクリプトだと思っていたら、なかなか手強い戦いでしたぞ。

|

« T644~踏切始動 | トップページ | T644~湖畔 »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/103983/12683024

この記事へのトラックバック一覧です: T644~警報機の鼓動:

« T644~踏切始動 | トップページ | T644~湖畔 »