Rosso Laboratory

Rosso Laboratory

主に鉄道模型シミュレーター(VRM)などの仮想鉄道アプリを扱うブログです。またHDR写真の記事も書いています。

第6回その2 キーを押して警笛を鳴らそう

【第1章】車両で遊ぼう
第6回 編成で警笛を鳴らそう
その2 キーを押して警笛を鳴らそう
キーを押したら発生する'keydown'イベントの使い方を覚えましょう。

【使用するVRMNX命令】色々な部品にある命令:SetEventKeyDown(文字,ユーザーID)
keydownイベントを呼び出します。文字には'A'-'Z'、'0'-'9'が使え、ユーザーIDには任意の数値(省略した場合は0)を設定します。

【やってみよう】「親子で学ぼう用レイアウト(2初期状態).vrmnx」を開き、編成「TRAIN_11」のスクリプトをこのように書こう。書くのが大変ならコピペしよう。完成品は「親子で学ぼう用レイアウト(6-2).vrmnx」です。

#OBJID=11
import vrmapi
def vrmevent_11(obj,ev,param):
    if ev == 'init':
        obj.SetEventKeyDown('Z',100)
(中略)
    elif ev == 'keydown':
        if param['eventUID'] == 100:
            obj.PlayHorn(0)

【解説】obj.SetEventKeyDown('Z',100)とは、Zキーをイベント発生の監視対象とし、押されたキーがZキーならユーザーIDを100としてparam['eventUID']に格納するという命令です。そしてif param['eventUID'] == 100:とは、自分の所の'keydown'イベントが発生した時にもしparam['eventUID']が100なら以下の命令を実行しなさいということで、以下の命令がobj.PlayHorn(0)です。解りましたか? paramは辞書型変数でキーに'eventUID'というものを持っていたのです。よく解らなかったらとりあえずこういう書き方がお約束なのだなと思っておいてください。

ここでは実はif param['eventUID'] == 100:はなくても動作してしまいますが、それは操作するキーが1つだけだからです。複数のキーが操作対象になれば必ず必要になりますので、こういう形として覚えておきましょう。

【実践】それでは「運転」を押してビューワーを起動させましょう。Zキーを押したら警笛が鳴りましたか? 鳴れば成功です(^^)/ 実はビューワーのデフォルトの機能としてスペースキーを押すと警笛が鳴るのでこのスクリプトを使うことは多分ないでしょう(^_^;)


(253系成田エクスプレスミュージックホーンが鳴るよ)

 

【余談】Pythonの書式で書きますと、'eventid','eventtime','eventUID'は共通で持っているようなので最低限でも
param = { 'eventid':11 , 'eventtime',8.096902 , 'eventUID',100 }
のような感じでキーと値を持っている訳ですね。下記のように書くと確認できます。ついでにobjやevも見てみましょう。

【使用するVRMNX命令】vrmapiモジュールの関数:vrmapi.LOG(引数)
引数には文字列や変数が入り、スクリプトLOGウィンドウにその結果を表示する。

【使用するVRMNX命令】色々な部品にある命令:GetNAME()
部品の名前を取得します。

#OBJID=11
import vrmapi
def vrmevent_11(obj,ev,param):
    if ev == 'init':
        obj.SetEventKeyDown('Z',100)
(中略)
    elif ev == 'keydown':
        if param['eventUID'] == 100:
            obj.PlayHorn(0)
            vrmapi.LOG(param['eventid'])
            vrmapi.LOG(param['eventtime'])
            vrmapi.LOG(param['eventUID'])
            vrmapi.LOG(obj.GetNAME())
            vrmapi.LOG(ev)


←戻る 目次 進む→
PVアクセスランキング にほんブログ村