VRMNXレイアウト作成入門【第六章】レイアウト作成(上級編) 第16回 Pythonスクリプト
大体のことは自動センサーで制御できるのですが、自動センサーでは全く出来ないのがキー操作による制御です。今回は「1」キー~「4」キーで編成速度変更、「5」キーでポイントの切り替えという手動運転用制御を実現します。下準備としてレイアウトファイルをコピーして別ファイルとし、下路線のホーム入線前のセンサー2つ(ポイント順次切り換えと停車~発車のセンサー)を削除してください。もう一方の上路線は自動運転のままにしておきます。
①編成速度変更
といってもこれから一緒に考えていきましょうという訳ではなく、OneDrive【公開レイアウト】にある「レイアウト入門用Python.txt」からスクリプトエディターにコピペするだけです。本当にPythonプログラミングを学びたいという方は【「鉄道模型シミュレーターNX」で学ぶPythonプログラミング入門】で学んでください。こちらは【鉄道模型シミュレーターNX入門】とは違い、使える本になっておりますので(自分も微かに関わっているので宣伝)。
対象編成を右ドラッグのポップアップメニューからスクリプトエディターを起動します。「レイアウト入門用Python.txt」から
if ev == 'init':
obj.SetEventKeyDown('1')
obj.SetEventKeyDown('2')
obj.SetEventKeyDown('3')
obj.SetEventKeyDown('4')
をコピーし、スクリプトエディターの
if ev == 'init':
dummy = 1
部分を選択し、[EDIT]-[貼り付け]を実行し置き換えます。
次に「レイアウト入門用Python.txt」から
elif ev == 'keydown':
if param['keycode'] == '1':
obj.SetVoltage(1.0)
elif param['keycode'] == '2':
obj.SetVoltage(0.5)
elif param['keycode'] == '3':
obj.SetVoltage(0.2)
elif param['keycode'] == '4':
obj.SetVoltage(0.0)
をコピーし、スクリプトエディターの
elif ev == 'keydown':
dummy = 1
部分を選択し、[EDIT]-[貼り付け]を実行し置き換えます。
②ポイント切り替え
編成と同様の作業を行ってください。
出来上がったらビューワー上でタグを表示しポイントがちゃんと動作するか確認します。
③解説
一応コードで何をやっているかだけは解説しておきます。
編成速度変更コード 翻訳
if ev == 'init': ←ビューワー起動時に1回だけ実行
obj.SetEventKeyDown('1') ←「1」を押したらKeyDownのイベント発生
obj.SetEventKeyDown('2') ←「2」を押したらKeyDownのイベント発生
obj.SetEventKeyDown('3') ←「3」を押したらKeyDownのイベント発生
obj.SetEventKeyDown('4') ←「4」を押したらKeyDownのイベント発生
elif ev == 'keydown': ←特定のキーが押されたら実行
if param['keycode'] == '1': ←もし押されたキーが「1」なら
obj.SetVoltage(1.0) ←電圧1.0にしなさい
elif param['keycode'] == '2': ←もし違って押されたキーが「2」なら
obj.SetVoltage(0.5) ←電圧0.5にしなさい
elif param['keycode'] == '3': ←もし違って押されたキーが「3」なら
obj.SetVoltage(0.2) ←電圧0.2にしなさい
elif param['keycode'] == '4': ←もし違って押されたキーが「4」なら
obj.SetVoltage(0.0) ←電圧0.0にしなさい
ポイント切り替えコード 翻訳
if ev == 'init': ←ビューワー起動時に1回だけ実行
obj.SetBranch(0) ←分岐を0にしなさい
obj.SetEventKeyDown('5') ←「5」を押したらKeyDownのイベント発生
elif ev == 'keydown': ←特定のキーが押されたら実行
if param['keycode'] == '5': ←もし押されたキーが「5」なら
if obj.GetBranch() == 0: ←そしてもし分岐が0なら
obj.SetBranch(1) ←分岐を1にしなさい
else: ←もし違うなら
obj.SetBranch(0) ←分岐を0にしなさい
以上で第16回を終わります。次回はモーションパスです(^^)/
<スターターキットのダウンロード先はコチラです>