[[FrontPage]]
* クイック設定ガイド [#re6faac7]
#contents
#br
#hr
#br
#br
** [Joystick Information] の確認 [#e8160fe4]

- ジョイスティックをつないだ状態でFlightGearを起動し、[Help] > [Joystick Information] をクリック
- グレー表示でクリック出来ない場合:
-- システムがジョイスティックを認識していないようです。
ジョイスティックが正しく接続されていることを確認してください。

#br
** Driver: 行の確認 [#b610d572]

- Driver: C:/Program Files/FlightGear/data/Input/Joysticks/'''メーカ名'''/'''機種名.xml''' となっている場合
-- 自動認識されているので追加設定は不要です。そのままお使いください。

- Driver: C:/Program Files/FlightGear/data/Input/Joysticks/Default/joystick.xml となっている場合
-- 自動認識が正常に機能しなかったため、汎用のジョイスティック定義ファイルをロードしています。
このため、基本的な操作しかできません。ジョイスティックの軸やボタンをフル活用するためには、次の手順に進んでください。

#br
** Joystick #0: 行の確認 [#v84b8034]

- 文字化けしている場合:
-- Vistaでこの現象が発生するようです。
自動認識させることはできませんが、手はまだあります。
ひとまず手順2に進んでください。

- "Saitek X45 Flight Controller"のように正常に表示される場合:
自動認識させることができるかもしれません。
同じく手順2に進んでください。

#br
#br
* ジョイスティック定義ファイルの調査 [#z3c7f8f4]

- FlightGear をインストールしたフォルダ内のFlightGear/data/Input/Joysticksフォルダをたどり、
使おうとしているジョイスティックの機種に該当しそうなジョイスティック定義ファイル('''メーカ名'''/'''機種名.xml''')が存在するかどうかを探します。
-- 存在する場合: もうすぐ設定完了です。手順3に進んでください。
-- 存在しない場合:
--- 残念ですが、既存のジョイスティック定義ファイルを雛形とし、jsdemo.exe でボタン動作の確認をしながら自分用のジョイスティックファイルを作成しなくてはなりません。
--- 作成方法については、以下の[[「ジョイスティック定義ファイルの作成」>ジョイスティックの設定方法#j761ff1f]]をご覧ください。
-- 基本的な操作のみでも構わなければ、汎用のジョイスティック定義ファイルのまま使用する、という選択肢もあります。

#br
#br
* $FG_ROOT/joysticks.xmlの修正 [#pcd6d7cb]

** 手順1.2でJoystick #0: が文字化けしていた場合: [#s482b5ad]

- FlightGear\data\joysticks.xml ファイルをテキストエディタで開き、以下のように赤字部分を追加します。
 <PropertyList>
 <!--
        <js-named include="Input/Joysticks/Local/X45-modified.xml"/>
 
        <js n="0" include="Input/Joysticks/Local/joystick_0.xml"/>
  -->
        <js n="0" include="Input/Joysticks/Saitek/ST290-Pro.xml"/>
 </PropertyList>

- 再び手順1.の [Joystick Information] を確認し、正しく設定ファイルをロードしていれば完了です。

** 手順1.2でJoystick #0: が"Saitek X45 Flight Controller"のように正常に表示されていた場合: [#e1d08a5b]

- 手順2で確認したジョイスティック設定ファイル(たとえばFlightGear/data/Input/Joysticks/Saitek/X45.xml)をテキストエディタで開き、たとえば以下の最後の行のような<name>行を追加します。
 <PropertyList>
  <name>Saitek X45</name>
  <name>Saitek Saitek X45</name>
  <name>Saitek X45 Flight Controller USB</name>
  <name>Saitek X45 Flight Control Stick </name>
  <name>Saitek Saitek X45 Flight Control Stick </name>
  <name>Saitek X45 Flight Controller</name>

- 再び手順1.の [Joystick Information] を確認し、正しく設定ファイルをロードしていれば完了です。

#br
#br
* ジョイスティック定義ファイルの作成 [#j761ff1f]
さて、先ほど「残念ですが」と言いましたが、「FlightGearの内部構造に触れる」チャンスでもあります。
実は、翻訳文書の[[「訳)特徴」の、「内部プロパティは公開されています」:http://flightgear.jpn.org/wiki/index.php?%CC%F5%29%C6%C3%C4%A7#d1484ffc]]
で出てきた「プロパティツリー」の値を書き換えることで飛行機を操作しています。
少々面倒に感じるかもしれませんが、ここを理解しておくと後々ジョイスティックの設定のカスタマイズをするときが楽です。

#br
** 設定の前に[#y70211e6]
Windows版では、FlightGearのインストール先を"C:\Program Files\FlightGear"に。
MacOSX版では、"/Applications"にインストールしていると仮定します。もし違う場所にインストールしている場合は読み替えてください。

#br
** js_demoの入手方法 [#x0b79df1]
本来ならjs_demoはFlightGearに同梱されている(べき)なのですが、Windows版、MacOSX版のFlightGear 1.9.0以降では省略されています。
//筆者はMacを所有していないので、MacOSX版FlightGearにjs_demoが付属しているか知りません。MacOS版を使用している方、補足お願いします。

*** Windowsの場合 [#n4a85b2b]
http://flightgear.jpn.org/modules/d3downloads/index.php?page=visit&cid=6&lid=20をダウンロードして、
C:\Program Files\FlightGear\binフォルダに保存してください。

*** MacOSXの場合 [#n4a85b2b]
http://flightgear.jpn.org/modules/d3downloads/index.php?page=visit&cid=6&lid=23をダウンロードして、
解凍してできた js_demo を
/Applications/FlightGear.app/Contents/Resourcesフォルダに保存してください。

#br
** js_demoの起動 [#c62dc28e]
ここでは、js_demoの起動方法だけを書きます。出力結果の読み方は後で説明します。

*** Windowsの場合 [#hc62daa8]
先ほど入手したjs_demoをコマンドプロンプトから起動してください。

 c:\
 cd "\Program Files\FlightGear\bin"
 js_demo.exe

*** MacOSXの場合 [#hc62daa8]
先ほど入手したjs_demoをダブルクリックで、またはターミナルから起動してください。

 cd /Applications/FlightGear.app/Contents/Resources
 ./js_demo


#br
** js_demoの出力結果の読み方と、操作割り当ての決定手順 [#wb84848f]

 Joystick test program.
 ~~~~~~~~~~~~~~~~~~~~~~
 Joystick 0 is "Saitek X45 Flight Controller"
 Joystick 1 not detected
 
  +---------------JS.0-----------------+---------------JS.1-----------------+
 | Btns Ax:0 Ax:1 Ax:2 Ax:3 Ax:4 Ax:5 Ax:6 Ax:7 |       ~~~ Not Detected ~~~         |
 +------------------------------------+------------------------------------+
 | 0000 +0.1 -0.0 +1.0 +1.0 +1.0 -1.0 +0.0 +0.0 |  .   .   .   .   .   .   .   .   . |
 | 0000 +0.1 -0.0 +1.0 +1.0 +1.0 -1.0 +0.0 +0.0 |  .   .   .   .   .   .   .   .   . |
 | 0000 +0.1 -0.0 +1.0 +1.0 +1.0 -1.0 +0.0 +0.0 |  .   .   .   .   .   .   .   .   . |
 | 0000 +0.1 -0.0 +1.0 +1.0 +1.0 -1.0 +0.0 +0.0 |  .   .   .   .   .   .   .   .   . |


最初の何行かの出力はスクロールが早くて画面を通り過ぎてしまうでしょう。その場合はCtrl-Cでプログラムを止めてください。

まず、最初の "Joystick 0 is "Saitek X45 Flight Controller" の行はジョイスティックの名前です。
先ほどの「1.2 Joystick #0: 行の確認」で認識された名前と同じ物になっていると思います。
ただし、日本語版WindowsVistaでは "Microsoft PC ジョイスティック ド"となりますが、この名前はFlightGearで使用できません。もしこの名前を使用した場合、fgfs.exeがnot-well-formedエラーで異常終了します。

次に、出力の読み方の解説をします。
左側の「JS:0」に注目してください。「JS:1」は繋いでいないのでドットが並んでいるだけですが、接続すれば当然ここにも数値が並びます。

一番左の列の値がボタンの状態を示していて、軸0〜軸7の順で各軸の状態を示しています。

- 初めに、何か適当に操作してみてください。ジョイスティックを何か操作して、初めてジョイスティックを何か操作する事で、初めて状態が反映される場合があります。 
--モード切り替えスイッチを「ボタン」として検出している場合があります。その場合、ボタンの値はゼロにならない場合があります。
--その場合、モード切替スイッチを操作して、その値を記録してください。
- モード切替スイッチのチェックが終わったら、それ以外のボタンを押して一番左の列の数字を記録してください。
- 他のボタンについてもこのチェックを繰り返してください。
- 次に、スティックを左右に倒して、「どの軸の数値が変化するか」を確認してください。
- その軸の、「中立位置での値」「右一杯に倒した時の値」「左一杯に倒した時の値」を確認して、メモしてください。
- 同様に他の軸についてもチェックしてください。
- HAT(POV)スイッチを操作してください。HATスイッチがボタンとして認識されるか軸として認識されるかは、ジョイスティックによって違うでしょう。

すると、以下のような表ができると思います。
さて、スティックのどの軸/ボタンに何を割り当てるかは人それぞれなので、私がPS2ジョイパッド+変換器 のジョイスティック定義ファイルを書いた時の一例を挙げます。
もし、適切な役割が思い浮かばない場合、取り合えず何も設定せず、必要になった時にその都度追加していけばいいでしょう。

--軸
, 軸番号 , 実際の軸 , 方向 , 備考 
, 0 , 左スティック左右 , 右に操作して正 , エルロン 
, 1 , 左スティック上下 , 上に操作して正 , エレベータ 
, 2 , 右スティック左右 , 右に操作して正 , ラダー 
, 3 , 右スティック上下 , 上に操作して正 , エレベータトリム 
, 4 , N/A , N/A , この軸は無い 
, 5 , N/A , N/A , この軸は無い 
, 6 , 左右ボタン , 右に操作して正 , POV左右
, 7 , 上下ボタン , 上に操作して正 , POV上下

--ボタン
, ボタン番号 , 数値 , 実際のボタン , 役割 
, N/A ,0000 ,         ,
, 0 , 0001 , △ , ラダートリム(右)
, 1 , 0002 , ○ , ミクスチャ リッチ
, 2 , 0004 , × , ミクスチャ リーン
, 3 , 0008 , □ , ラダートリム(左)
, 4 , 0010 , L2 , スロットル閉
, 5 , 0020 , R2 , スロットル開
, 6 , 0040 , L1ボタン , プロペラ回転下げ(高ピッチ)
, 7 , 0080 , R1ボタン , プロペラ回転上げ(低ピッチ)
, 8 , 0100 , スタート , セルモータを回す
, 9 , 0200 , セレクト , 見る方向をリセット
, 10 , 0400 , L3 , 車輪ブレーキ
, 11 , 0800 , R3 , 使用せず

#br
** 実際にXMLファイルを記述する [#hab46326]

- その前に、「1.2 Joystick #0: 行の確認」で、文字化けしていた方は$FG_ROOT/joysticks.xmlを以下のように修正してください。
 <PropertyList>
 <!--
 	<js-named include="Input/Joysticks/Local/X45-modified.xml"/>
 
 	<js n="0" include="Input/Joysticks/Local/joystick_0.xml"/>
 -->
 <js n="0" include="Input/Joysticks/manufacture/urjoystick.xml" />      <!--←この行を追加 -->
 </PropertyList>

これは、ジョイスティックの自動認識の結果を上書きして、使用するジョイスティック定義ファイルを明示的に指定します。
実際のところ、2バイト文字を含まないファイル名なら何でもいいですので、わかり易い名前にしておいてください。
(他のジョイスティック定義ファイル同様、$FGROOT\Input\Joysticks\'''メーカー名'''\'''機種名.xml'''、としておく事をお勧めします。)

#br
** ジョイスティック設定ファイルを実際に書く [#ncd462e5]
多くの場合、「既存のジョイスティック定義ファイルを元に・・・」と解説されますが、ここでは「イチからファイルを書く」場合を解説します。
もちろん、既存のジョイスティック定義ファイルの中に、あなたが使いたいジョイスティックとボタン/軸の数が同じで、割り当てられた機能が似通っていればそれを流用してもかまいません。

-まず、(メモ帳以外の)テキストエディタを開き、先頭に<PropertyList>と書いてください。
-次に<name></name>と書き、両タグの間に先ほどjs_demoで表示されたジョイスティックの名前を入力してください。<name>Saitek X45 Flight Controller</name>、といった感じで。
-以下の物を軸の数だけコピー&ペーストしてください。
 <axis n="">
  <desc></desc>
  <dead-band>0<dead-band>
  <binding>
   <command></command>
  </binding>
 </axis>
+まず、<axis n="'''軸番号'''">に変更して、どの軸か指定します。
+軸の概要を<desc>タグと</desc>タグの間に書きます。(<desc>Ailone</desc>
+デッドバンドを設定したい場合、<dead-band>と<dead-band>の間の数字を変更します。<dead-band>0.1<dead-band>とか。
+また、動かした方向「だけ」が必要な場合は<high>と<low>の2種類のタグを使う事ができます。
---<high>と<low>を使って、軸をエレベータートリムの調整に使用する場合は、このようにします。
 <axis n="1">
   <low>
    <repeatable>true</repeatable>
    <binding>
     <command>property-adjust</command>
     <property>/controls/flight/elevator-trim</property>
     <step type="double">0.001</step>
    </binding>
   </low>
   <high>
    <repeatable>true</repeatable>
    <binding>
     <command>property-adjust</command>
     <property>/controls/flight/elevator-trim</property>
     <step type="double">-0.001</step>
    </binding>
   </high>
 </axis>
+<command>と</command>の間に、使いたいコマンドを書きます。コマンドは大体以下の通りです。(軸で使うのに適さない、という理由で省略したものもあります)
--property-scale:生のジョイスティックの出力を加工してプロパティの値にします。オプションは以下の通りです。
--優先順位はdead-band,offset,factorの順です。別の表現をすれば、cooked_value = (( raw_value > dead-band ) + offset) * factor となります
---<property>'''設定したいプロパティ'''</property>で設定したいプロパティを選択します。
---<offset>'''オフセット量'''</offset>で0点をいくらズラすかを設定します。
---<factor>'''倍率'''</factor> ↑で0点をずらした場合に操作範囲を調整する時や、軸を反転したい場合に使います。
---エルロンを操作するための使用例
 <binding>
    <command>property-scale</command>
    <property>/controls/flight/aileron</property>
    <offset type="double">0.0</offset>
    <factor type="double">1.0</factor>
 </binding>
--property-adjust:一度実行される毎に値をstepだけ増やします。
---<property>'''設定したいプロパティ'''</property>で設定したいプロパティを選択します。
---<step>'''一度の動作で増やす量'''</step>(負の数を指定するとstepだけ減らす事ができます)。先述の<high><low>と同時に利用すると使いやすいです。(さっきも出てきました)
--nasal:nasalスクリプトを実行します。
---<script>タグと</script>タグの間にスクリプトを書いてください。最近はnasal経由で色々なプロパティを操作する事が多いです。詳しくは後述します。

-全ての軸の設定が終わるまで、これを繰り返します。
#br
-それが終わったら、以下の物をボタンの数だけコピー&ペーストしてください。

 <button n="">
  <desc></desc>
  <repeatable>false</repeatable>
  <binding>
   <command></command>
  </binding>
 </button>

+まず、<axis n="'''ボタン番号'''">に変更して、どのボタンか指定します。
+ボタンの概要を<desc>タグと</desc>タグの間に書きます。(<desc>gear down/gear up</desc>
+リピート動作させたい場合は、<repeatable>のところを、以下のように変更してください。
 <repeatable>true</repeatable>
+<command>と</command>の間に、使いたいコマンドを書きます。コマンドは大体以下の通りです。(ボタンで使うのに適さない、という理由で省略したものもあります)
--property-adjust:一度実行される毎に値をstepだけ増やします。
---<property>'''設定したいプロパティ'''</property>で設定したいプロパティを選択します。
---<step>'''一度の動作で増やす量'''</step>(負の数を指定するとstepだけ減らす事ができます)
---以下のサンプルは、ボタン2に「ラダートリムを0.001(正なので右方向に)動かす」割り当てをする例です。この場合、ラダートリムを-0.001(負なので左方向に)動かす割り当ては別のキーに割り当てる必要があります。
 <button n="2">
  <desc>Rudder Trim Right</desc>
  <repeatable>true</repeatable>
  <binding>
   <command>property-adjust</command>
   <property>/controls/flight/rudder-trim</property>
   <step>0.001</step>
  </binding>
 </button>

--property-toggle:指定したプロパティの値のオン/オフ(true/false)の切り替えをします。
---<property>'''設定したいプロパティ'''</property>で設定したいプロパティを選択します。
---以下はスピードブレーキのオン/オフの切り替えをさせる例です。
 <desc>Toggle speedbrake</desc>
   <binding>
   <command>property-toggle</command>
   <property>/controls/flight/speedbrake</property>
 </binding>
--property-assign:指定したプロパティの値を指定した値に変えます。
---<property>'''設定したいプロパティ'''</property>で設定したいプロパティを選択します。
---<value>:値をここで指定します。
---左ブレーキをかける設定例
 <binding>
   <command>property-assign</command>
   <property>/controls/gear/brake-left</property>
   <value type="double">1.0</value>    <!-- ブレーキは1.0に設定されます -->
 </binding>
--property-swap:以下のように、2組の<property>タグで指定した2つのプロパティの値を入れ替えます。
 <binding>
   <command>property-swap</command>
   <property>/sim/panel/path</property>
   <property>/sim/panel_2/path</property>
 </binding> 
---nasal:nasalスクリプトを実行します。
---<script>タグと</script>タグの間にスクリプトを書いてください。最近はnasal経由で色々なプロパティを操作する事が多いです。詳しくは後述します。
-全て終わったら</PropertyList>と書いて、保存してください。

*** 操作すべきプロパティ [#g3e79609]
+操縦翼面
-/controls/flight/aileron
--エルロンです。-1〜+1の範囲のdouble形で、左方向が負、中心がゼロ、右方向が正になります。
-/controls/flight/elevator
--エレベータです。-1〜+1の範囲のdouble形で、機首上げ側が負、中心がゼロ、機首下げ側が正です。
-/controls/flight/rudder-trim
--ラダーです。-1〜+1の範囲のdouble形で、左方向が負、中心がゼロ、右方向が正になります。
-/controls/flight/elevator-trim
--エレベータトリムです。機首上げ側が負、中心がゼロ、機首下げ側が正です。
-/controls/flight/rudder-trim
--ラダートリムです。-1〜+1の範囲のdouble形で、左方向が負、中心がゼロ、右方向が正になります。

+エンジン関係
-/controls/engines/engine[0]/throttle
--第一エンジンのスロットルです。double形で、0で最小、1でフルスロットルになります。
-/controls/engines/engine[0]/mixture
--第一エンジンのミクスチャーです。double形で、0で最小、1で燃料が一番濃くなります。
-/controls/engines/engine[0]/propeller-pitch
--第一エンジンのプロペラピッチです。double形で、0で最小回転数、1で最大回転数になります。

なお、第二エンジンの場合、操作すべきプロパティが/controls/engines/engine[1]/・・・・・・といったようになります。
エンジンの数が変わってもジョイスティックの設定をわざわざ変えなくてもいいように、エンジン関係はnasal経由で操作する事が多いです。

+車輪関係
-/controls/gear/brake-left
--左車輪のブレーキです。double形で、0でブレーキ解除、1でフルブレーキになります。
-/controls/gear/brake-right
--右車輪のブレーキです。double形で、0でブレーキ解除、1でフルブレーキになります。
-/controls/gear/brake-parking
--駐機用ブレーキです。double形で、0でブレーキ解除、1でブレーキをセットします。

*** nasalスクリプトの使い方 [#z3f17efb]
-以下に、nasal経由でFGCOM向けにPTTを割り当てる例を記述します。
 <button n="8">
   <desc>PTT (for fgcom)</desc>
     <binding>
           <command>nasal</command>
           <script>controls.ptt(1)</script>
     </binding>
        <mod-up>
            <binding>
               <command>nasal</command>
               <script>controls.ptt(0)</script>
            </binding>
        </mod-up>
 </button>
--この場合、ボタン8を押すとcontrols.nas内のptt関数に、引数に1を与えて呼び出します。
--<mod-up>については詳しくは後述しますが、controls.nas内のptt関数に、引数に0を与えて呼び出します。
--参考資料(controls.nasより)
 var ptt = func(b) setprop("/instrumentation/comm/ptt", b);

-また、特に引数を与えずに呼び出す場合もあります。
--以下の例は、スロットル制御をnasalで行う例です。
 <axis n="2">
  <desc>Throttle</desc>
  <binding>
   <command>nasal</command>
   <script>controls.throttleAxis()</script>
  </binding>
 </axis>
--参考資料(controls.nasより)
 # Joystick axis handlers (use cmdarg).  Shouldn't be called from
 # other contexts.  A non-null argument reverses the axis direction.
 var axisHandler = func(pre, post) {
     func(invert = 0) {
         var val = cmdarg().getNode("setting").getValue();
         if(invert) val = -val;
         foreach(var e; engines)
             if(e.selected.getValue())
                 setprop(pre ~ e.index ~ post, (1 - val) / 2);
     }
 }
 var throttleAxis = axisHandler("/controls/engines/engine[", "]/throttle");
 var mixtureAxis = axisHandler("/controls/engines/engine[", "]/mixture");
 var propellerAxis = axisHandler("/controls/engines/engine[", "]/propeller-pitch");
 var carbHeatAxis = axisHandler("/controls/anti-ice/engine[", "]/carb-heat");

--この例では、変数throttleAxisを呼び出した後は以下のように働きます。
+++axisHandler()関数が呼び出される
+++nasalに組み込まれているcmdarg()関数を通して軸の値を取得する
+++その値を(1-val)/2 した物をsetprop()関数でスロットルの値を設定します。
+++↑を機体のエンジン数だけ繰り返し実行します。

多くの場合、「欲しい機能を与えてくれるnasal関数は何か」と、「その関数への引数」さえ知っていれば、実際の関数内部でどう動いているかはブラックボックスでも大丈夫でしょう。
なので、以下でジョイスティックの設定に使える関数と引数、それから簡単な説明をするつもりです。
-controls.gearDown('''n''')
--車輪の上げ下げをします。
---引数: '''n'''=-1で脚上げ、'''n'''=1で脚を下げます。'''n''' =0なら何もしません。
-controls.flapsDown('''n''')
--フラップの上げ下げをします。
---引数:'''n'''=-1でフラップを(最大フラップに対して)33%上げ、'''n'''=1でフラップを33%下げます。'''n'''=0だと何もしません。
-controls.gearToggle()
--ギアの上げ下げをトグルします。controls.gearDown()と違い、ギアが上がっていれば下げ、下がっていれば上げます
---引数:なし
-controls.startEngine()
--controls.selectEngine()又はcontrols.selectAllEngines()で選択したエンジンのセルモーターを回します。
---引数:なし
-controls.selectEngine('''n''')
--操作したいエンジンを選択します。
---引数:エンジン番号('''n'''=0で第一エンジン、'''n'''=1で第二エンジン・・・)
-controls.selectAllEngines()
--全てのエンジンを選択します。
---引数:なし
-props.setAll('''base''' , '''child''' , '''value''')
--以下のように、プロパティ配列のそれぞれに同じ値をセットする場合に使うとよいでしょう。
 "/controls/engines/engine[0]/starter"
 "/controls/engines/engine[1]/starter"
 "/controls/engines/engine[2]/starter"
---引数: '''base''':値をセットするプロパティの親要素''' , '''child''':baseの子要素, '''value''':セットしたい値 となっています。
---全てのエンジンのスターターを止めたい場合の例を示します。
 props.setAll("/controls/engines/engine", "starter", 0)
-view.panViewDir('''step''')
--視界を左右に動かします。
---引数: '''step'''度ずつ視界を左右に動かします。正の値で右、負の値で左を見ることが出来ます。
-view.panViewPitch('''step''')
--視界を上下に動かします。
---引数: '''step'''度ずつ視界を上下に動かします。正の値で上、負の値で下を見ることが出来ます。
-view.resetView()
--視点をリセットします。x/Xキーでズームしていた場合、解除されます。
---引数:なし

*** ちょっと凝った設定 [#e2d40a3a]
-「ボタンを離した時に動作」させたいなら、</binding>の後ろに<mod-up>を付け加え、更に<binding>タグを付け加え、適切なコマンドとオプションを与えてから、</binding></mod-up>で閉じます。
--ボタン4に「押している間だけ左車輪ブレーキを掛ける」≒「押したら左ブレーキを掛け、離したら解除される」設定を書く場合、こんな感じになります。
 <button n="4">
   <desc>Left brake</desc>
   <binding>
    <command>property-assign</command>
    <property>/controls/gear/brake-left</property>
    <value type="double">1.0</value>    
   </binding>
   <mod-up>                   
    <binding>
      <command>property-assign</command>
      <property>/controls/gear/brake-left</property>
      <value type="double">0.0</value>
    </binding>
   </mod-up>
 </button> 

-また、一つの軸やボタンで複数のプロパティの操作を割り当てることも出来ます。
これはスロットルなどに使えました・・・が、前述の通り今はnasalコマンドを使用する場合が多いです。
--以下に、軸4に第一エンジン(engine[0])と第二エンジン(engine[1])のミクスチャを割り当てる場合の設定を書いておきます。
 <axis n="4">
  <desc>Mixture</desc>
  <binding>
   <command>property-scale</command>
   <property>/controls/engines/engine[0]/mixture</property>
   <offset type="double">-1.0</offset>
   <factor type="double">-0.5</factor>
  </binding>
  <binding>
   <command>property-scale</command>
   <property>/controls/engines/engine[1]/mixture</property>
   <offset type="double">-1.0</offset>
   <factor type="double">-0.5</factor>
  </binding>
 </axis>

**関連文書 [#a8bba39a]
さらに細かくカスタマイズしたい、といった場合は[[訳)ジョイスティック・キーボードの設定方法]]を参照願います。
----
新規作成 2009/03/29 sambar
ちょっと整形&js_demoの出力のところを一部修正 2009/03/29 21:09 sambar
nasalの部分を追加開始 2009/03/29 23:41 sambar
js_demo導入のMac版を作成 2009/03/30 00:53 MiYABi
nasalの部分の追加終了 2009/03/31 sambar

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS