Rosso Laboratory

Rosso Laboratory

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

第16回 煙をオンオフしてみよう(エミッター)

【第4章】色々なオブジェクトで遊ぼう
第16回 煙をオンオフしてみよう(エミッター)
10個のエミッターが煙を上げているのでこれをキーを使って消したり着けたりしましょう。エミッターとは粒子を発生させる部品で、煙や水流などを再現することができます。

【使用するVRMNX命令】レイアウトの命令:GetEmitter(エミッターのID番号)
指定IDのエミッターオブジェクトを取得します。オブジェクトIDの代わりに部品に設定した名前でも検索できます。

【使用するVRMNX命令】エミッターの命令:Start()
エミッターを動作開始します。

【使用するVRMNX命令】エミッターの命令:Stop()
エミッターを停止します。

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

#LAYOUT
import vrmapi
def vrmevent(obj,ev,param):
    if ev == 'init':
        vrmapi.LAYOUT().SetView(10)
        obj.SetEventKeyDown('N',116)
        obj.SetEventKeyDown('M',117)
(中略)
    elif ev == 'keydown':
        if param['eventUID'] == 116:
            vrmapi.LAYOUT().GetEmitter(60).Stop()
            vrmapi.LAYOUT().GetEmitter(61).Stop()
            vrmapi.LAYOUT().GetEmitter(62).Stop()
            vrmapi.LAYOUT().GetEmitter(63).Stop()
            vrmapi.LAYOUT().GetEmitter(64).Stop()
            vrmapi.LAYOUT().GetEmitter(65).Stop()
            vrmapi.LAYOUT().GetEmitter(66).Stop()
            vrmapi.LAYOUT().GetEmitter(67).Stop()
            vrmapi.LAYOUT().GetEmitter(68).Stop()
            vrmapi.LAYOUT().GetEmitter(69).Stop()
        if param['eventUID'] == 117:
            vrmapi.LAYOUT().GetEmitter(60).Start()
            vrmapi.LAYOUT().GetEmitter(61).Start()
            vrmapi.LAYOUT().GetEmitter(62).Start()
            vrmapi.LAYOUT().GetEmitter(63).Start()
            vrmapi.LAYOUT().GetEmitter(64).Start()
            vrmapi.LAYOUT().GetEmitter(65).Start()
            vrmapi.LAYOUT().GetEmitter(66).Start()
            vrmapi.LAYOUT().GetEmitter(67).Start()
            vrmapi.LAYOUT().GetEmitter(68).Start()
            vrmapi.LAYOUT().GetEmitter(69).Start()

【実践】それでは「運転」を押してビューワーを起動させましょう。Nキーで煙が止まり、Mキーで煙が上がれば成功です(^^)/

【解説】10個なのでこれで済みましたが100個、1000個とあったらやってられませんね(^_^;) ですのでもっとスマートな方法があります。レイアウト内のエミッター全てを一気にオンオフする方法です。

【使用するVRMNX命令】レイアウトの命令:ListEmitter(リスト変数)
エミッターオブジェクトリストを取得します。

【使用するPython命令】list(反復可能オブジェクト)
リストを作成する。反復可能オブジェクトを省略した場合は空のリストを作成する。反復可能オブジェクトとはイテレータを作成することができるオブジェクトのことで、イテレータとは['要素1','要素2','要素3','要素4'・・・]のような形をしており既に習った辞書などもこれに相当します。

【使用するPython命令】for 変数名 in 反復可能オブジェクト:
リストなどの反復可能オブジェクトの要素を順番に変数に代入し、終わるまで繰り返し処理する。

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

#LAYOUT
import vrmapi
def vrmevent(obj,ev,param):
    if ev == 'init':
        vrmapi.LAYOUT().SetView(10)
        obj.SetEventKeyDown('N',116)
        obj.SetEventKeyDown('M',117)
(中略)
    elif ev == 'keydown':
        ls=list()
        vrmapi.LAYOUT().ListEmitter(ls)
        if param['eventUID'] == 116:
            for item in ls:
                item.Stop()
        if param['eventUID'] == 117:
            for item in ls:
                item.Start()

【解説】list命令で空のリスト「ls」を作り、ListEmitter命令でレイアウト内の全エミッターをリストに納めています。Nキーへの分岐でlsの中の全エミッターを1つずつitemに代入してループしStop命令で停止させています。Mキーでは逆に再生しています。

【実践】それでは「運転」を押してビューワーを起動させましょう。Nキーで煙が止まり、Mキーで煙が上がれば成功です(^^)/
←戻る  目次 進む→
PVアクセスランキング にほんブログ村