VRM入道

VRM侍は出家しますた(w    カリカリ

 
投稿者
メール

 
コメント
URL
コメントは新しいものから表示されます。
コメント本文中とURL欄にURLを記入すると、自動的にリンクされます。
投稿者:ゆゆぽん☆
[編成スクリプト]
BeginFunc MtdCheckSignal
Var MtdVoltage
GetCurrentVoltage MtdVoltage
ifeq ObjCheckSignal.VarSignalColor 1
AutoSpeedCtrl 200 0.0
endif
ifeq ObjCheckSignal.VarSignalColor 3
if> MtdVoltage 0.55
AutoSpeedCtrl 200 0.5
endif
endif

EndFunc

で指定速度を超えている場合のみ動作するようになりました。やっと出発・場内信号制御のみになりましたね。あと一息頑張りたいと思います。
投稿者:ghost
動的オブジェクト参照についてはその理解で正しいです。

> 注意信号のifでGetCurrentVoltageを評価

ifeq ObjCheckSignal.VarSignalColor 3 と endif で囲まれた部分は、換呼する信号が黄の場合のみ実行されますよね。

この中にもう1つ if〜endifの組を作るわけです。つまり、信号が黄で“かつ”現在の速度(走行電圧)がある値を超えていたら〜する、といった処理です。

具体的には、現在の走行電圧を取得するためのローカル変数をメソッドの冒頭で宣言し、GetCurrentVoltage命令でこの変数に値を得ます。この値をif>命令でたとえば0.5を超えていたら、というように評価してやります。

この2つのif系命令(信号が黄か、と、走行電圧がある値以上か)の内側に速度変化(注意減速)の命令を書けば、信号が黄色でかつ速度が一定の値を超えていた場合に限り減速する、が実現できます。
投稿者:ゆゆぽん☆
えっ、簡単にできたのですか?
1回getの命令を使い間違い、未定義外部命令というのが出た記憶があるので、別のやり方でやったのですが、簡単ですむのですね。

>get RapidA.ObjCheckSignal ObjComingSignal
Signal○が持つオブジェクト変数ObjComingSignalはセンサーにあり、編成オブジェクト変数RapidAを持つ編成に、変数ObjComingSignalを知らせる為に
は、ある変数(ObjCheckSignal)が編成にある必要がある。そこで編成の持つObjCheckSignalを中継として変数ObjComingSignalの値を知らせる。
といった形で理解しましたが、
注意信号のifでGetCurrentVoltageを評価というのが、よく解りません。よろしくお願いします。
投稿者:ghost
多分、それでも動くでしょうけども・・・

[換呼センサースクリプト]
VarSignal ObjComingSignal
get ObjComingSignal {この換呼センサーが担当する信号名称}

Var SigCtrl
SetEventSensor MtdRelayCheckSignal SigCtrl

BeginFunc MtdRelayCheckSignal
VarTrain RapidA //これはローカル変数でよい
GetSenseTrain RapidA
get RapidA.ObjCheckSignal ObjComingSignal //編成のObjCheckSignalにObjComingSignalの値を渡す
call RapidA MtdCheckSignal

EndFunc

[編成スクリプト]
VarSignal ObjCheckSignal //編成から換呼すべき信号の名前を受け取る変数

BeginFunc MtdCheckSignal
ifeq ObjCheckSignal.VarSignalColor 1
//停車処理を書く
endif
ifeq ObjCheckSignal.VarSignalColor 3
//注意減速処理を書く
endif

EndFunc

実は、これだけでいけます。今、手元にVRM環境がないのでミスがあるかも知れませんが。申し上げたいのは“編成スクリプトに、換呼する信号ごとに専用のメソッドを作る必要はない”という点です。

と言うか、このやりかたをしないと、信号を増やしたり減らしたりする都度、編成スクリプトを書き直す必要が生じ、遅かれ早かれ破綻します。

ゆゆぽん☆殿が本気でVRMスクリプトを習得したいと願うのであれば、この方法=動的オブジェクト参照は絶対に理解した方がいいです。ちょっとじっくり考えながら読んでみてください。補足説明が必要であれば要求してください。

> 注意信号は速度が指定より低くてもその速度にあわせようとしてしまいます。どうしたら良いのでしょうか?

AutoSpeedCtrlする前に、GetCurrentVoltageで現在の走行電圧を取得し、これをif系命令で評価して、AutoSpeedCtrlしようとする電圧を超えている場合のみAutoSpeedCtrlするようにすればいいんじゃないでしょうか。
投稿者:ゆゆぽん☆
BeginFunc MtdCheckSignal1
ifeq ObjCheckSignal1.VarSignalColor 1
AutoSpeedCtrl 200 0.0
endif
ifeq ObjCheckSignal1.VarSignalColor 3
AutoSpeedCtrl 200 0.5
endif
EndFunc
BeginFunc MtdCheckSignal3
ifeq ObjCheckSignal3.VarSignalColor 1
AutoSpeedCtrl 200 0.0
endif
ifeq ObjCheckSignal3.VarSignalColor 3
AutoSpeedCtrl 200 0.5
endif
EndFunc
BeginFunc MtdCheckSignal4
ifeq ObjCheckSignal4.VarSignalColor 1
AutoSpeedCtrl 200 0.0
endif
ifeq ObjCheckSignal4.VarSignalColor 3
AutoSpeedCtrl 200 0.5
endif
EndFunc
BeginFunc MtdCheckSignal5
ifeq ObjCheckSignal5.VarSignalColor 1
AutoSpeedCtrl 200 0.0
endif
ifeq ObjCheckSignal5.VarSignalColor 3
AutoSpeedCtrl 200 0.5
endif
EndFunc
BeginFunc MtdCheckSignal6
ifeq ObjCheckSignal6.VarSignalColor 1
AutoSpeedCtrl 200 0.0
endif
ifeq ObjCheckSignal6.VarSignalColor 3
AutoSpeedCtrl 200 0.5
endif
EndFunc
BeginFunc MtdCheckSignal7
ifeq ObjCheckSignal7.VarSignalColor 1
AutoSpeedCtrl 200 0.0
endif
ifeq ObjCheckSignal7.VarSignalColor 3
AutoSpeedCtrl 200 0.5
endif
EndFunc
待避列車と連動するセンサーは、センサーごとコピーして必要なところ(連動する信号とTrain変数)を書き換えて使用していますが、停止に関しては問題なく動きました。
※本線対応…Signal1,3〜7
※待避対応…Signal2,3〜6,8
しかし、注意信号は速度が指定より低くてもその速度にあわせようとしてしまいます。どうしたら良いのでしょうか?

投稿者:ゆゆぽん☆
[編成]
VarSignal ObjCheckSignal1
get ObjCheckSignal1 Signal1

VarSignal ObjCheckSignal3
get ObjCheckSignal3 Signal3

VarSignal ObjCheckSignal4
get ObjCheckSignal4 Signal4

VarSignal ObjCheckSignal5
get ObjCheckSignal5 Signal5

VarSignal ObjCheckSignal6
get ObjCheckSignal6 Signal6

VarSignal ObjCheckSignal7
get ObjCheckSignal7 Signal7

投稿者:ゆゆぽん☆
動きましたが、正解か自信ありません。
[センサーCheckSignanSns1〜8]
VarSignal ObjComingSignal1〜8
get ObjComingSignal1〜8 Signal1〜8

VarTrain RapidA
get RapidA 本線/待避

VarSignal ObjCheckSignal1〜8
get ObjCheckSignal1〜8 本線/待避

Var SigCtrl
SetEventSensor MtdRelayCheckSignal SigCtrl


BeginFunc MtdRelayCheckSignal

GetSenseTrain RapidA
call RapidA MtdCheckSignal1〜8

EndFunc

実験的代物

CSS無効化 ここで知った方法を使ってます

真・世界征服新着情報

今月のお勤め

2008年
← September →
Sun Mon Tue Wed Thu Fri Sat
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        
RSS
Copyright (C) GMO Tea Cup Communication, Inc. All Rights Reserved.