FrontPage

#

クイック設定ガイド

[Joystick Information] の確認

Driver: 行の確認

Joystick #0: 行の確認

ジョイスティック定義ファイルの調査

$FG_ROOT/joysticks.xmlの修正

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

<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.2でJoystick #0: が"Saitek X45 Flight Controller"のように正常に表示されていた場合:

<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>

4. ジョイスティック定義ファイルの作成

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

4.1 はじめに

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

4.2 js_demoの入手方法

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

4.2.1 Windows 

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

4.3 js_demoの起動

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

4.3.1 Windowsの場合

先ほど入手したjs_demoをコマンドプロンプトから起動してください。

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

4.4 js_demoの出力結果の読み方と、操作割り当ての決定手順

Joystick test program.
~~~~~~~~~~~~~~~~~~~~~~
Joystick 0 is "New Joystick USB"
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 "CH PRODUCTS CH FLIGHT SIM YOKE USB" の行はジョイスティックの名前です。 先ほどの「1.2 Joystick #0: 行の確認」で認識された名前と同じようになっていると思います。 ただし、日本語版WindowsVistaでは "Microsoft PC ジョイスティック ド"となりますが、この名前はFlightGearで使用できません。もしこの名前を使用した場合、fgfs.exeがnot-well-formedエラーで異常終了します。

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

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

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

4.5 実際に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、としておく事をお勧めします。)

4.5 ジョイスティック設定ファイルを実際に書く

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

<axis n="">
 <desc></desc>
 <dead-band>0<dead-band>
 <binding>
  <command></command>
 </binding>
</axis>
  1. まず、<axis n="軸番号">に変更して、どの軸か指定します。
  2. 軸の概要を<desc>タグと</desc>タグの間に書きます。(<desc>Ailone</desc>
  3. デッドバンドを設定したい場合、<dead-band>と<dead-band>の間の数字を変更します。<dead-band>0.1<dead-band>とか。
  4. また、動かした方向「だけ」が必要な場合は<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>
  5. <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経由で色々なプロパティを操作する事が多いです。詳しくは後述します。
<button n="">
 <desc></desc>
 <repeatable>false</repeatable>
 <binding>
  <command></command>
 </binding>
</button>
  1. まず、<axis n="ボタン番号">に変更して、どのボタンか指定します。
  2. ボタンの概要を<desc>タグと</desc>タグの間に書きます。(<desc>gear down/gear up</desc>
  3. リピート動作させたい場合は、<repeatable>のところを、以下のように変更してください。
    <repeatable>true</repeatable>
  4. <command>と</command>の間に、使いたいコマンドを書きます。コマンドは大体以下の通りです。(ボタンで使うのに適さない、という理由で省略したものもあります)
    • property-adjust:一度実行される毎に値をstepだけ増やします。
      • <property>設定したいプロパティ</property>で設定したいプロパティを選択します。
      • <step>一度の動作で増やす量</step>(負の数を指定するとstepだけ減らす事ができます) (まだ書いてない)
    • property-toggle:指定したプロパティの値のオン/オフ(true/false)の切り替えをします。
      • <property>設定したいプロパティ</property>で設定したいプロパティを選択します。 (まだ書いてない)
    • 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経由で色々なプロパティを操作する事が多いです。詳しくは後述します。

4.5.1 操作すべきプロパティ

  1. 操縦翼面
  1. エンジン関係

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

  1. 車輪関係

4.5.2 nasalスクリプトの使い方

(執筆予定)

4.5.3 ちょっと凝った設定



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