2006/11/8

ちょっとだけリアルな信号機  VRMスクリプト禅問答
昨日、ちょっと出かけようと駅へ向かったら、丁度電車が出ていくところで悔しい思いをいたしました。そのとき、何気なく電車を見送っていて、あることに気づき、帰宅後に試してみたところ思ったよりも良さげな感じだったので、紹介しておきます。

*     *     *

とりあえず、VRM4第2号収録の信号部品を1つレイアウト上に配置し、以下のスクリプトを書き込んでみてください。

[信号スクリプト]
//初期設定
SetSignal 1
//キー設定
Var IDKey
SetEventKey this Step1 IDKey z

//青になるメソッドその1
BeginFunc Step1
KillEvent IDKey
Var IDTmp
SetEventAfter this Step2 Tmp 500
SetSignal 0
EndFunc

//青になるメソッドその2
BeginFunc Step2
Var Tmp
SetEventAfter this Step3 Tmp 10000
SetSignal 6
EndFunc

//赤になるメソッドその1
BeginFunc Step3
Var Tmp
SetEventAfter this Step4 Tmp 500
SetSignal 0
EndFunc

//赤になるメソッドその2
BeginFunc Step4
SetSignal 1
SetEventKey this Step1 IDKey z
EndFunc

で、この信号機が見える位置に編成を配置してビュワーを起動し、[z]キーを押して信号の遷移する様子を見てください。ちょっとだけリアルじゃないですか?


要するに・・・

Step1
 キーイベントを解除(KillEvent IDKey)
 信号を消す(SetSignal 0)
 ↓
 0.5秒
 ↓
Step2
 青信号を灯火(SetSignal 6)
 ↓
 10秒
 ↓
Step3
 信号を消す(SetSignal 0)
 ↓
 0.5秒
 ↓
Step4
 赤信号を灯火(SetSignal 1)
 キーベントを再設定(SetEventKey this Step1 IDKey z)

という仕掛けです。冒頭に書いた「電車を見送っていて気づいたあること」というのは(少なくともウチの近所の駅の)信号の灯火が切り替わる際、青→赤、と一瞬にして変わるのではなく、青→消灯→赤、と変わっていく、という、まぁ、つまんないことです。多分、VRMスクリプトをやってなかったら、気づかなかったんじゃないか、と思いますが。

[信号スクリプト]
//信号灯火色を示すグローバル変数
Var SignalColor

//ちょっとだけリアルな信号切替メソッド
BeginFunc MtdChangeSingal
Var Tmp
SetSignal 0
SetEventAfter this MtdSignalColor Tmp 500
EndFunc

BeginFunc MtdSignalColor
SetSignal SignalColor
EndFunc

信号部品に上掲のような汎用スクリプトを書いておけば、この信号のグローバル変数SignalColorに1〜6の灯火色を示す数値を代入し、メソッドMtdChangeSingalをcallすることで、ちょっとだけリアルな信号切替を実現できます。

SetEventAfterの最後のパラメーター“500”はお好みで調整してみてください。実は、ボク自身がこの仕掛けを試したときは、700(ミリ秒)でやってみました。ここで紹介するのに、どうもキリの悪い数字ではないか、と思ったので、サンプルコード中では500にしてます。

なお、言うまでもないですが、これは(今のところ)第2号収録の灯火式の信号機に対してのみ有効です。第4号収録の腕木式信号にこのスクリプトを使うと、こうなっちゃいますから
0

この記事へのトラックバックURLはありません
トラックバック一覧とは、この記事にリンクしている関連ページの一覧です。あなたの記事をここに掲載したいときは、「記事を投稿してこのページにお知らせする」ボタンを押して記事を投稿するか(AutoPageを持っている方のみ)、記事の投稿のときに上のトラックバックURLを送信して投稿してください。
→トラックバックのより詳しい説明へ


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