AIロケット(2) | virt_flyのブログ

virt_flyのブログ

フライトシミュレーターソフトのFlightGearで仮想飛行を楽しむブログです。

イメージ 1

 Jack MermodさんのAIロケットは、3DモデルをはじめすべてのファイルがSceneryの地形データ中に置かれています。タイルファイルのstg中には、ロケット本体とランチャーの位置指定のためにメインの2つのxmlファイルがそれぞれOBJECT_SHARED以下に位置情報とともに記述されています。
 これをまねてSA-2の場合も、ミサイル本体のsa-2.xmlとランチャー用のlauncher.xmlを用意し、ミサイルサイトを置きたいScneryの地形データ中のstgファイルのOBJECT_SHARED以下に緯度、経度、高度、向きの値とともにこれを記述します。

 さてミサイルをクリックすれば飛んでいくという今回の核心となるクリッカブルなプログラム、およびミサイルを飛行させるプログラムは、sa-2.xmlファイルに下記のように記述されます。

<?xml version="1.0"?>
<PropertyList>
<path>SA-2-ai.xml</path>    ←acファイルを指定せずxmlファイルにしたのはスモークの発生のため他
    <offsets>    ←ミサイル本体の相対的位置指定
      <x-m> -3.2 </x-m>
      <y-m> 0.0 </y-m>
      <z-m> 4.4 </z-m>
      <roll-deg>    0.000 </roll-deg>
      <pitch-deg>   22.000 </pitch-deg>    ←ミサイルの発射角
      <heading-deg> 0.000 </heading-deg>
    </offsets>
    <nasal>    ←クリッカブルのためのNasalプログラム
     <load>
      var i = setlistener("controls/scenery/object/sam/SA-2/clicked", func(n) {
        var click = n.getValue();
        if(click){
          interpolate("controls/scenery/object/sam/SA-2/launch", 1, 384);
          print("SAM --FIRE!");
        }
       },1);
     </load>
    </nasal>

<!-- Make Rocket Clickable -->    ←以下クリッカブルのための記述
<animation>
   <type>pick</type>
   <object-name>body</object-name>
   <action>
       <button>0</button>
       <repeatable>false</repeatable>
       <binding>
      <command>property-toggle</command>
      <property>controls/scenery/object/sam/SA-2/clicked</property>
       </binding>
   </action>
</animation>

<!-- Rocket Fly -->     ←ミサイルの飛行用の記述
<animation>
   <type>translate</type>
   <object-name>body</object-name>
   <object-name>flamme1</object-name>    ←ロケットエンジンの炎
   <object-name>brule</object-name>    ←ロケットエンジンの白熱光
   <object-name>smoke</object-name>    ←スモーク発生のため
   <property>controls/scenery/object/sam/SA-2/launch</property>
   <factor>6574</factor>
   <axis>
       <x>-5.0</x>    ←斜めに上昇させるために適当に数値を与えた
       <y>0</y>
       <z>0.37</z>
   </axis>
</animation>

<!-- Make flames disappear when rocket is stationary -->
<animation>
   <type>select</type>
   <object-name>flamme1</object-name>
   <object-name>brule</object-name>
   <object-name>smoke</object-name>
<condition>
<greater-than>
   <property>controls/scenery/object/sam/SA-2/clicked</property>
<value>0</value>
</greater-than>
</condition>
</animation>

<!-- Illuminate Blast Flames -->
      (略)
<!-- Illuminate Rocket at Night -->
      (略)
</PropertyList>