FlightGear2.9.0以前/ジョイスティックの設定
の編集
http://flightgear.jpn.org/wiki/index.php?FlightGear2.9.0%B0%CA%C1%B0%2F%A5%B8%A5%E7%A5%A4%A5%B9%A5%C6%A5%A3%A5%C3%A5%AF%A4%CE%C0%DF%C4%EA
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
2casinochaos.blogspot.com
2dcmnjos.xyz
2dqgdrmm.xyz
2ticizesk.xyz
2vinccfe.com
2zeaocv.com
3Dモデルの作成方法
3blackjackessentials
3pokerclash
77wincasino1
???á?ó?È/?¨Àᤴ¤È
Atlas起動オプション
AutoTicketLinkName
BETBLACKJACK
Bendix/King KAP140 オートパイロットについて
BracketName
Download Application
Download Scenery
Esmeralda
FAQ
Features
FlightGear
FlightGear1.9.1以前/訳)バージョン履歴
FlightGear2.9.0以前/FGCom の利用方法
FlightGear2.9.0以前/ジョイスティックの設定
FlightGearの特徴(機械翻訳)
FlightGearバージョン遍歴
FlightGearフライトスクール
FlightGearフライトスクール/序文
FlightGearフライトスクール/第1章
FlightGearフライトスクール/第I部
FlightGearフライトスクール/第I部/第2章
FlightGearフライトスクール/第I部/第3章
FlightGearフライトスクール/第I部/第4章
FlightGearフライトスクール/付録
FlightGearマニュアル
FlightGearマニュアル/第10章
FlightGearマニュアル/第11章
FlightGearマニュアル/第1章
FlightGearマニュアル/第2章
FlightGearマニュアル/第3章
FlightGearマニュアル/第4章
FlightGearマニュアル/第5章
FlightGearマニュアル/第6章
FlightGearマニュアル/第7章
FlightGearマニュアル/第8章
FlightGearマニュアル/第9章
FlightGearマニュアル/第III部
FlightGearマニュアル/第II部
FlightGearマニュアル/第IV部
FlightGearマニュアル/第IV部/付録C
FlightGearマニュアル/第I部
FlightGearマニュアル/付録A
FlightGearマニュアル/付録B
FormattingRules
FrontPage
Help
InterWiki
InterWikiName
InterWikiSandBox
InterWikiテクニカル
JPオリジナルダウンロードへの登録方法
JSBSim フライトモデルの解説
Linuxクイックインストール
Linux版Atlas
MP Carrier の利用方法
Mac 向け説明
Mac版クイックインストール
MenuBar
NAVの簡単な使い方
Nasal スクリプト集
Nasal マニュアル
NumLock
OverView
PHP
PrivacySettings
PukiWiki
PukiWiki/1.4
PukiWiki/1.4/Manual
PukiWiki/1.4/Manual/Plugin
PukiWiki/1.4/Manual/Plugin/A-D
PukiWiki/1.4/Manual/Plugin/E-G
PukiWiki/1.4/Manual/Plugin/H-K
PukiWiki/1.4/Manual/Plugin/L-N
PukiWiki/1.4/Manual/Plugin/O-R
PukiWiki/1.4/Manual/Plugin/S-U
PukiWiki/1.4/Manual/Plugin/V-Z
PukiWiki/1.4/マニュアル/プラグイン
PukiWiki/1.4/マニュアル/プラグイン/a
PukiWiki/1.4/マニュアル/プラグイン/b
PukiWiki/1.4/マニュアル/プラグイン/c
PukiWiki/1.4/マニュアル/プラグイン/d
PukiWiki/1.4/マニュアル/プラグイン/e
PukiWiki/1.4/マニュアル/プラグイン/f
PukiWiki/1.4/マニュアル/プラグイン/h
PukiWiki/1.4/マニュアル/プラグイン/i
PukiWiki/1.4/マニュアル/プラグイン/l
PukiWiki/1.4/マニュアル/プラグイン/m
PukiWiki/1.4/マニュアル/プラグイン/n
PukiWiki/1.4/マニュアル/プラグイン/o
PukiWiki/1.4/マニュアル/プラグイン/p
PukiWiki/1.4/マニュアル/プラグイン/r
PukiWiki/1.4/マニュアル/プラグイン/s
PukiWiki/1.4/マニュアル/プラグイン/t
PukiWiki/1.4/マニュアル/プラグイン/u
PukiWiki/1.4/マニュアル/プラグイン/v
PukiWiki/1.4/マニュアル/プラグイン/y
PukiWiki練習場
Pukiwikiの練習場
RecentDeleted
SandBox
Sohbet
Sohbetodalari
Some Test Page
USEFUL LINK FOR SEO
Useful guarantee site
WikiEngines
WikiName
WikiWikiWeb
Win版クイックスタート(インストール編)
Win版クイックスタート(起動編)
Yasim フライトモデルのチューニング
YukiWiki
akawahuynh
animep
baccaratblogone01
baccaratblogxyz01
bloggingsite
calabarzon2
casinositeguidecom000
casinositeguidecom0000
casinositeguidecom00000
casinositeguidecom000001
casinositekimcom000
casinositekimcom0000
casinositekimcom00000
casinositekimcom000001
casinositenetcom000
casinositenetcom0000
casinositenetcom00000
casinositenetcom000001
ce-top10
chchx
comment_on_manual
cwin05cc
daytime.nas
ddddddssssss
ffe.nas
gamegusto02
googredirect1
googredirect2
googredirect3
googredirect4
googredirect5
googredirect6
googredirect7
googredirect8
gwolf25805
gwolf7777
gwolf777700
hantv
heguru
hen
henitub
henstrm
henti
hention
hentistram
heticu
hni
hnthavn
isabellabowen23
kammey01
linkbacarasite2
linkbacarasite3
linkbetsarang
linkmajor1
linkmajor2
linkmajor3
linkmajor4
linkmajor5
linkmajor6
linkmajor7
linkmajor8
linkoncablogxyz
linkoncablogxyz1
linkoncablogxyz2
linkoncablogxyz3
linkoncablogxyz4
linkoncablogxyz5
linkoncablogxyz6
linkoncablogxyz7
linkoncablogxyz8
linkoncasinosite
linkoncasinosite1
linkoncasinosite2
linkoncasinosite3
linkoncasinosite4
linkoncasinosite5
linkoncasinosite6
linkoncasinosite7
linkoncasinosite8
linkpowerballsite
linkpowerballsite1
linkpowerballsite2
linkpowerballsite3
linkpowerballsite4
linkpowerballsite5
linkpowerballsite6
linkpowerballsite7
linkpowerballsite8
linksmajor6
linksoncablogxyz6
linksoncasinosite6
linksouthwestern
linksouthwestern1
linksouthwestern2
linksouthwestern3
linksouthwestern4
linksouthwestern5
linksouthwestern6
linksouthwestern7
linksouthwestern8
linksportsblog
linksportsblog1
linksportsblog2
linksportsblog3
linksportsblog4
linksportsblog5
linksportsblog6
linksportsblog7
linksportsblog8
linkspowerballsite6
linkssouthwestern6
linkssportsblog6
linkstotolink6
linkstotopick6
linkstotositeinfo6
linkstotositeone6
linkstotositepros6
linktotolink4
linktotolink5
linktotolink6
linktotolink7
linktotolink8
linktotopick
linktotopick1
linktotopick2
linktotopick3
linktotopick4
linktotopick5
linktotopick6
linktotopick7
linktotopick8
linktotositeinfo
linktotositeinfo1
linktotositeinfo2
linktotositeinfo3
linktotositeinfo4
linktotositeinfo5
linktotositeinfo6
linktotositeinfo7
linktotositeinfo8
linktotositeone
linktotositeone1
linktotositeone2
linktotositeone3
linktotositeone4
linktotositeone5
linktotositeone6
linktotositeone7
linktotositeone8
linktotositepros
linktotositepros1
linktotositepros2
linktotositepros3
linktotositepros4
linktotositepros5
linktotositepros6
linktotositepros7
linktotositepros8
linkviki
loversmoon
loversmoon22
malachitemajestybaccarat2023
mttotositecom000
mttotositecom0000
mttotositecom00000
mttotositecom000001
muses
new88marketing
nsisteej
nubko01
outlook8970
pachinkosite45067
pecigie
performance.nas
playbackEx
pokerchipsupdate
r34
rats
rocking_nimitz.nas
rumbos viajeros
rumbos viajeros web
safetotositepro000
safetotositepro0000
safetotositepro00000
safetotositepro000001
simply
slotsite7890
sportstototv03698
taila
tokmatikbuytiktoklikes
toto365690
twicsydakopigfolgere
twicsyfreeinstagramlikes
twicsyitacquistafollowerins
verhe
vinbetbet
vonser02
wapkw02
wikibetsarang
wikibetsarang0
wikibetsarang00
wikibetsarang1
wikibetsarang2
wikibetsarang3
wikibetsarang4
wikibetsarang5
wikibetsarang6
wikibetsarang7
wikimajor
wikimajor0
wikimajor00
wikimajor1
wikimajor2
wikimajor3
wikimajor4
wikimajor5
wikimajor6
wikimajor7
wikioncablogxyz
wikioncablogxyz0
wikioncablogxyz00
wikioncablogxyz1
wikioncablogxyz2
wikioncablogxyz3
wikioncablogxyz5
wikioncablogxyz6
wikioncablogxyz7
wikioncasinosite
wikioncasinosite0
wikioncasinosite00
wikioncasinosite1
wikioncasinosite2
wikioncasinosite3
wikioncasinosite5
wikioncasinosite6
wikioncasinosite7
wikipowerballsite
wikipowerballsite0
wikipowerballsite00
wikipowerballsite1
wikipowerballsite2
wikipowerballsite3
wikipowerballsite5
wikipowerballsite6
wikipowerballsite7
wikisouthwestern
wikisouthwestern0
wikisouthwestern00
wikisouthwestern1
wikisouthwestern2
wikisouthwestern3
wikisouthwestern5
wikisouthwestern6
wikisouthwestern7
wikisportsblog
wikisportsblog0
wikisportsblog00
wikisportsblog1
wikisportsblog2
wikisportsblog3
wikisportsblog5
wikisportsblog6
wikisportsblog7
wikitotopick
wikitotopick0
wikitotopick00
wikitotopick1
wikitotopick2
wikitotopick3
wikitotopick5
wikitotopick6
wikitotopick7
wikitotositeinfo
wikitotositeinfo0
wikitotositeinfo1
wikitotositeinfo2
wikitotositeinfo3
wikitotositeinfo5
wikitotositeinfo6
wikitotositeinfo7
wikitotositeone
wikitotositeone0
wikitotositeone00
wikitotositeone1
wikitotositeone2
wikitotositeone3
wikitotositeone6
wikitotositeone7
wikitotositepro
wikitotositepro0
wikitotositepro1
wikitotositepros00
wikitotositepros3
wikitotositepros7
wynn09
xanipo
zexyl01
zexyl02
すべての機器、キーストローク、およびメニューに関して
コンテンツ
シーナリーのインストール
ジョイスティックの設定
ジョイスティックの設定方法
ソースからのインストール(Unix編)
ソースコード
ソースコード機械翻訳
ソフトのダウンロード(機械翻訳)
チョコレートダイアリーディライト
テスト
ナビゲーションツールAtlasの設定方法
バージョン情報
バージョン情報機械翻訳
フライトデータの記録と再生
ヘルプ
マルチプレーヤー設定
機体データのサイト集
機体データの作成
機体データの作成/YASimフライトモデルの解説
機体データ開発FAQ
機体操作方法
空港ダイヤグラム作成ツールのインストール
現実の気象の反映方法
航空管制に挑戦
次期アップデート情報
新FGマニュアル第二章
新しいシーナリーをインストールしよう!!!
整形ルール
第1章
第2章
第3章
着陸練習
投稿ガイド(案)
日本語
風景のダウンロード(機械翻訳)
翻訳作業場トップページ
訳)FAQ
訳)FlightGearのダウンロード
訳)FlightGearショートリファレンス
訳)イントロダクション
訳)シーナリーのダウンロード
訳)ジョイスティック・キーボードの設定方法
訳)スクリーンショット
訳)スクリーンショット/v0.9.10
訳)スクリーンショット/v1.0
訳)スクリーンショット/v1.9
訳)ダウンロード
訳)トラブルシューティング
訳)動作環境
訳)特徴
鐃緒申鐃緒申鐃淑リー鐃塾ワ申鐃藷スト¥申鐃緒申
[[FrontPage]] 注意:本文書はFlightGear2.9.0以前のものを対象としていますが、FlightGear 2.10.0以降でも手動で設定する場合に有用と思われるため、名前を変えて残しています。 2.10.0以降で、より簡単にジョイスティックを設定する方法は[[ジョイスティックの設定]]を参照ください。 * 手動設定ガイド [#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 --ラダーです。-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()で選択したエンジンのセルモーターを回します。 ---引数:なし~ 以下の様に、<repeatable>と<mod-up>を使うと、「ボタン13を押している間セルモータが回りつづけ、離すとセルモータが止まる」ようにできます。~ <button n="13"> <desc>Fire Starter on Selected Engine(s)</desc> <repeatable>true</repeatable> <binding> <command>nasal</command> <script>controls.startEngine(1)</script> </binding> <mod-up> <binding> <command>nasal</command> <script>controls.startEngine(0)</script> </binding> </mod-up> </button> -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 - 本メモ欄をリスト化 toshi &new{2009-04-19}; - SPAMにより削除された内容を復活 toshi &new{2009-12-27}; - 再びSPAMにより書き換えられたため、管理者権限でページ名を「ジョイスティックの設定方法」から「ジョイスティックの設定」に変更 toshi &new{2009-12-27}; - 管理者権限で暫定的にページ名を「ジョイスティックの設定(旧版)」に変更。当面は手動設定ガイドとして活用(将来的には[[訳)ジョイスティック・キーボードの設定方法]])との統合も検討 sambar &new{2013-02-02}
画像と同じ番号を入力 :
[[FrontPage]] 注意:本文書はFlightGear2.9.0以前のものを対象としていますが、FlightGear 2.10.0以降でも手動で設定する場合に有用と思われるため、名前を変えて残しています。 2.10.0以降で、より簡単にジョイスティックを設定する方法は[[ジョイスティックの設定]]を参照ください。 * 手動設定ガイド [#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 --ラダーです。-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()で選択したエンジンのセルモーターを回します。 ---引数:なし~ 以下の様に、<repeatable>と<mod-up>を使うと、「ボタン13を押している間セルモータが回りつづけ、離すとセルモータが止まる」ようにできます。~ <button n="13"> <desc>Fire Starter on Selected Engine(s)</desc> <repeatable>true</repeatable> <binding> <command>nasal</command> <script>controls.startEngine(1)</script> </binding> <mod-up> <binding> <command>nasal</command> <script>controls.startEngine(0)</script> </binding> </mod-up> </button> -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 - 本メモ欄をリスト化 toshi &new{2009-04-19}; - SPAMにより削除された内容を復活 toshi &new{2009-12-27}; - 再びSPAMにより書き換えられたため、管理者権限でページ名を「ジョイスティックの設定方法」から「ジョイスティックの設定」に変更 toshi &new{2009-12-27}; - 管理者権限で暫定的にページ名を「ジョイスティックの設定(旧版)」に変更。当面は手動設定ガイドとして活用(将来的には[[訳)ジョイスティック・キーボードの設定方法]])との統合も検討 sambar &new{2013-02-02}
テキスト整形のルールを表示する