訳)ジョイスティック・キーボードの設定方法
の編集
http://www.flightgear.jpn.org/wiki/index.php?%CC%F5%29%A5%B8%A5%E7%A5%A4%A5%B9%A5%C6%A5%A3%A5%C3%A5%AF%A1%A6%A5%AD%A1%BC%A5%DC%A1%BC%A5%C9%A4%CE%C0%DF%C4%EA%CA%FD%CB%A1
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
2casinochaos.blogspot.com
2dcmnjos.xyz
2dqgdrmm.xyz
2ticizesk.xyz
2vinccfe.com
2zeaocv.com
3Dモデルの作成方法
3blackjackessentials
3pokerclash
77wincasino1
???á?ó?È/?¨Àᤴ¤È
Atlas起動オプション
AutoTicketLinkName
BETBLACKJACK
Bendix/King KAP140 オートパイロットについて
BracketName
Comparing Diesel Generators to Other Backup Options in Australia
Download Application
Download Scenery
Esmeralda
FAQ
Fanny01
Features
Fifth
FightForLove
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 フライトモデルの解説
JonathanBanayat
Karrie055
Linuxクイックインストール
Linux版Atlas
LorenzSantos
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
betsarang.com01a
bloggingsite
bscnews023
calabarzon2
casinositeguidecom000
casinositeguidecom0000
casinositeguidecom00000
casinositeguidecom000001
casinositekimcom000
casinositekimcom0000
casinositekimcom00000
casinositekimcom000001
casinositekimcom000011
casinositenetcom000
casinositenetcom0000
casinositenetcom00000
casinositenetcom0000001
ce-top10
chchx
cmriindia025
comment_on_manual
crunchbase
cwin05cc
daytime.nas
ddddddssssss
facebook
ffe.nas
gamegusto02
googredirect1
googredirect2
googredirect3
googredirect4
googredirect5
googredirect6
googredirect7
googredirect8
gwolf25805
gwolf7777
gwolf777700
gwolfinfo254
hantv
heguru
hen
henitub
henstrm
henti
hention
hentistram
heticu
hni
hnthavn
isabellabowen23
jolosjos
jolosjos234
kammey01
lienminhokvippet
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
linksoncasinosite6
linksouthwestern
linksouthwestern1
linksouthwestern2
linksouthwestern3
linksouthwestern4
linksouthwestern5
linksouthwestern6
linksouthwestern7
linksportsblog
linksportsblog1
linksportsblog2
linksportsblog3
linksportsblog4
linksportsblog5
linksportsblog6
linksportsblog7
linksportsblog8
linkssportsblog
linkssportsblog6
linkstotolink6
linkstotopick6
linkstotositeinfo6
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
outlookindia03com
outlookspotlight4
pachinkosite45067
pecigie
performance.nas
playbackEx
pokerchipsupdate
r34
racesite100014
rats
rocking_nimitz.nas
rumbos viajeros
rumbos viajeros web
safetotositepro000
safetotositepro0000
safetotositepro00000
safetotositepro000001
safetotositepro0000011
simply
slotsite7890
sportstototv03698
taila
tokmatikbuytiktoklikes
toto365690
twicsyarr
twicsybuyinstagramlikes
twicsydakopigfolgere
twicsyfracheterigfollowers
twicsyfreeinstagramlikes
twicsyitacquistafollowerins
twicsynl
verhe
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
wooricasinotop0222
wynn09
xanipo
zexyl01
zexyl02
すべての機器、キーストローク、およびメニューに関して
コンテンツ
シーナリーのインストール
ジョイスティックの設定
ジョイスティックの設定方法
ソースからのインストール(Unix編)
ソースコード
ソースコード機械翻訳
ソフトのダウンロード(機械翻訳)
チョコレートダイアリーディライト
テスト
ナビゲーションツールAtlasの設定方法
バージョン情報
バージョン情報機械翻訳
フライトデータの記録と再生
ヘルプ
マルチプレーヤー設定
機体データのサイト集
機体データの作成
機体データの作成/YASimフライトモデルの解説
機体データ開発FAQ
機体操作方法
空港ダイヤグラム作成ツールのインストール
現実の気象の反映方法
航空管制に挑戦
次期アップデート情報
新FGマニュアル第二章
新しいシーナリーをインストールしよう!!!
整形ルール
第1章
第2章
第3章
着陸練習
投稿ガイド(案)
日本語
風景のダウンロード(機械翻訳)
翻訳作業場トップページ
訳)FAQ
訳)FlightGearのダウンロード
訳)FlightGearショートリファレンス
訳)イントロダクション
訳)シーナリーのダウンロード
訳)ジョイスティック・キーボードの設定方法
訳)スクリーンショット
訳)スクリーンショット/v0.9.10
訳)スクリーンショット/v1.0
訳)スクリーンショット/v1.9
訳)ダウンロード
訳)トラブルシューティング
訳)動作環境
訳)特徴
鐃緒申鐃緒申鐃淑リー鐃塾ワ申鐃藷スト¥申鐃緒申
[[翻訳作業場トップページ]] このドキュメントは $FG_ROOT/Docs/Readme.Joysticks.htmlの日本語訳です。 ---- #contents #br *ジョイスティック・キーボードの設定方法 [#d239370e] version 0.9.8.1 13/10/2005 Author John Check (FlightGear1.9.1添付バージョン) この文書はFlightGear0.7.7以降を対象として書かれています。 ジョイスティックがあなたのOS上で正常に認識され、動作しているという前提で書いています。この文書はLinuxユーザーの視点で書かれていますが、しかしこの情報は他のプラットフォームでも有効です。~ (訳注:訳者はWindowsVistaユーザーです。)~ David Megginsonに感謝します。誰がXMLの実装をしたかはさておき、彼の解説資料はスマートに見えました。~ #br *いくつかの歴史 [#ye2ba402] 初期のFGFSのジョイスティックの軸(Axis)/ボタン(button)と、キーバインディングはハードコードされていました。もしデフォルトのジョイスティックの設定を使用しない、もしくは違うキーバインディングを使いたい場合、ソースコードを修正して再コンパイルする必要がありました。~ 幸運な事に、v0.7.5.aの頃に"プロパティマネージャ"が与えられ、ジョイスティックで簡単にパラメータをセットできるようになりました。~ バージョン0.7.7ではプロパティマネージャの役割が拡張され、イベントとコマンドを束ねることが出来るようになりました。~ このコードは、FGInputとして知られていて、ジョイスティックと同様にキーボードのコマンドバインディングを構成するのに使用されます。~ バージョン0.7.9では条件付けが許容され、編集された決定ツリーを加えました。(修正希望)~ #br *最も重要な事: [#a1f4d364] 私は、ジョイスティックとキーボードについては後で書くつもりです。~ FGInputは一般的なものを十分に扱えます。それは、ジョイスティックのボタンとキーボードのイベントを同様に扱います。~ さまざまな方法でキーボードまたはジョイスティックのバインディングを記憶できます。使える方法は以下のとおりです:~ , ソース , 場所 , 書式 , 有効範囲 ,command line , STDIN , see examples , そのセッションのみ ,.fgfsrc , ~/ , コマンドラインオプション , 現在のユーザーのみ ,system.fgfsrc , $FG_ROOT , コマンドラインオプション , システム全体 ,joystick.xml , $FG_ROOT , XMLプロパティリスト , システム全体 ,keyboard.xml , $FG_ROOT , XMLプロパティリスト , システム全体 訳者注:以降、joystick.xmlとkeyboard.xmlについての解説が主体となります。~ #br *XMLについて [#w26b48de] あなたがこれを疑問に思っている時のために、XMLは「eXtensible Markup Language」と書いておきます。~ これは、HTMLに非常に似ていますが、(訳者追記:XML文書に使う場合に限って言えば)あなた自身で定義したタグを使用できます。~ さて、FGFSの場合では、私たちはあなたがジョイスティック/キーボードを構成するために必要とするタグを定義しました。XMLは階層的に組織化された構造を記述するのに適しています。FGFSで使用しているプロパティツリーのような、外部のアプリケーションへの内容です。あなたは、FGFSのためにXMLファイルを設定するには、以下の開始タグと終了タグをペアで記述しなければなりません。~ <PropertyList> <!-- HTMLと同じように、<!-- -->で囲った部分はコメントです。 --> </PropertyList> #br *[Help]>[Joystick Information]の情報からジョイスティックの情報を集める [#ma517d6c] 注意:この項は原文が現状に追いついていないため、sambarが追加したものです。~ 今まではjs_demoでしかジョイスティックの情報を得ることが出来ませんでしたが、1.9.0ではもっと楽な方法があります。現在の段階ではまだ限られた情報しか得られませんが、いずれ改善されるでしょう。~ +ジョイスティックの各軸、特にスロットルレバーを0点としたい位置にしてください。 エルロンやエレベータは何もしなくても勝手に中心に来るでしょう。 +FlightGearを起動してください。 +FlightGearの画面の上部にあるメニューバーの、 [Help]を開き、その中の[Joystick Information]を選択してください。 +すると、以下のようなメニューが出るはずです。 (画像をここに貼り付ける予定。) これは、WindowsVista(x64)でCH Products製のヨークとラダーをジョイスティックに繋いだときの物です。WindowsVistaやXPでは、現在ジョイスティックの自動認識が正常に機能せず、日本語環境では「Joystick#0: Microsoft PC *W***C*X*e*B*b*N *h」と表示されることがあります。対処法は後述します。 幸運にも文字化けせずに、接続したジョイスティックの名前を検出できた場合は、それを元に自動で認識できるので、 読み込んだファイル名を確認して、正しいジョイスティック定義ファイルを読み込んでいるか確認してください。 **もし正しいジョイスティック定義ファイルを読み込まず、デフォルトのジョイスティック定義ファイルを読み込んでいる場合 [#t21fc95a] +まず、検出されたジョイスティック名をメモする。例えば、Saitek X45を「Saitek X45 Flight Controller」として検出している場合、それをメモしておきます。 +ジョイスティックのメーカー名と、検出された名前を元に、$FGROOT/Input/Joysticks/'''メーカー名'''/'''製品名'''.xml(この場合、$FGROOT/Input/Joysticks/Saitek/X45.xml)を探して、それを開いてください。無ければ「ジョイスティック定義ファイルが無い場合」へ進んでください。 +「定義ファイルはあるし、ジョイスティック名も正常に検出しているにもかかわらず、自動でそれを読み込まない」状態ですので、先ほどメモしたジョイスティック名を以下の要領で追加してください。 <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> <!--ここが追加した行 --> **「Joystick#0: Microsoft PC *W***C*X*e*B*b*N *h」と文字化けして表示された時の対処法 [#zac264d4] $FGROOT/Joysticks.xmlを以下の要領で修正し、読み込むべきジョイスティック定義ファイルを手動で指定すると良いでしょう。 <js n="0" include="Input/Joysticks/Saitek/ST290-Pro.xml"/> もし適切なジョイスティック定義ファイルが見当たらない場合には「ジョイスティック定義ファイルが無い場合」を読んでください。 **ジョイスティック定義ファイルが無い場合 [#o0c52817] $FGROOT/input/Joysticks/Default/four-axis-joystick.xml内の<name>タグを、先ほどの[Joystick Information]で取得した自分のジョイスティック名に書き換えれば、「一応」飛べるようになります。 ただし、ジョイスティック名が文字化けしていた場合には、このファイルは「とりあえず」何もしないでおき、$FGROOT/Joysticks.xmlを以下のように書き換えてください。 <js n="0" include="Input/Joysticks/Default/four-axis-joystick.xml"/> そして、画面上の「Aileron」「Elevator」「Throttle」「Rudder」の数値を監視しながら、色々な軸を操作してください。 #br *js_demoを使用して、ジョイスティックの出力をどのプロパティに割り当てるか決める [#c43303c1] FlightGearには、かつてjs_demoユーティリティが同梱されていました。(1.9.0以降は同梱されていませんが、toshiさんのご好意により、[[FlightGear JPにアップロードされています:http://flightgear.jpn.org/modules/d3downloads/index.php?page=visit&cid=6&lid=20]])~ これは、ジョイスティックの数と能力について調査する強力なツールです。~ ジョイスティックを操作しながらjs_demoの出力を監視すれば、軸/ボタンに対して割り当てる操作を決める事ができます。~ 一般的に、*NIX環境では付番がゼロから始まることに注意してください。 以下の例では、システムで、1個のジョイスティック(js0)を接続します。この出力は、4ボタンとスロットル付きのアナログGravis BlackHawkジョイスティックの物です。~ js_demoの典型的な出力 Joystick test program. ~~~~~~~~~~~~~~~~~~~~~~ Joystick 1 not detected <!-- ジョイスティック番号は0から始まります --> Joystick 2 not detected +--------------JS.0--------------+ | Btns Ax:0 Ax:1 Ax:2 | +--------------------------------+ | 0000 +0.0 +0.0 -1.0 | js_demoの内部では、button0は2進数で1の位、button1は2の位、button2は4の位・・・と扱われますが、画面上では16進数で表されます。 ,画面表示(16進数),押したボタン,2進数での表現(参考) ,0001,button 0,000000000000001 ,0002,button 1,000000000000010 ,0004,button 2,000000000000100 ,0008,button 3,000000000001000 ,0010,button 4,000000000010000 ,0020,button 5,000000000100000 ,0040,button 6,000000001000000 ,0080,button 7,000000010000000 ,000a,button 1 と button 3 の同時押し,000000000001010 ・・・といった要領で8000(button 15)まで続きます。 (訳注:16進数で表示されることを強調するため、0014から000aに変更) #br *デフォルトでのジョイスティックのプロパティ [#f5c9d9eb] -Axis 0 = エルロン -Axis 1 = エレベータ -Axis 2 = ラダー -Axis 3 = スロットル -Button 0 = 両車輪のブレーキ -Button 1 = エレベータトリム (up) -Button 2 = エレベータトリム (down) #br *じゃあ、今度は何をするか [#x0b59a46] 先ほど集めたUSBジョイスティック(orジョイスティックポート)からの出力が何であるか分かったので、あなたは多分FGInputを今すぐ使いたいと思っているでしょう。もしこれ以前のFGFSのバージョンでジョイスティックを設定するのに慣れているなら、あなたは「コマンドマネージャ」セクションまでスキップできます。~ もし、新しいFGFSユーザーなら、いくつかの概念を理解するために次の項を読んでください。それはまた、コマンドマネージャでまだ実装されていない、古いジョイスティックオプションをカバーします。~ #br *「生」のジョイスティックの値を修正する [#cbc006b8] これらのコンセプトは、ジョイスティックバインディングに理由付けする事です。~ 生の値をそのままジョイスティックの軸として使う事が適切でない場合があります。また、ベストパフォーマンスを得るために実験を重ねる場合、基本概念があなたを救うことを理解してください。~ また、全てのジョイスティックが同じ状態で作られるとは限りません。(訳注:必ず製造時に誤差を含んでいます) 軸のプロパティに対する修正順序はこのようになっています。 +生のジョイスティックの値 +デッドゾーン(dead-band,入力を無視する範囲)をフィルタリングします。(deadbandは、コマンドマネージャの外で実行されます。) +オフセット(offset,中心からのズレ)を修正します。 +3までの値に、factorを乗算します。 +この結果が得られた値を、FlightGearのプロパティのコントロールに使用します。 別の表現をすれば、下記のようになります。 cooked_value = (( raw_value > dead-band ) + offset) * factor 軸のプロパティは以下の通りです。 #br **dead-band [#sb679174] -1 0 1 ............... -1 | | 1 ^ dead-band このエリア内の信号は無視されます。どんな信号も無視される範囲を作成することによってノイズや、品質の悪い電圧計/可変抵抗を補います。dead-bandは0位置に依存します。~ デフォルトの、エレベーターとエルロンのための0.1の設定はガク引きに対して寛容です。数値を小さくすると、よりきつい感じをもたらします。 スロットル等、いくつかの場合では、あなたはdead-bandを設定したがっていないかもしれません。 この場合0.0の値を使用してください。 #br **offset [#y0ee6b80] -1 0 1 ............. -1 ^ 1 offset 軸の操作範囲を広げたい場合に使用します。スロットル等、0が最小値になる場合で、ラダー等とは違ってセンターが無い場合に使用します。標準的には-1.0を使用します。 #br **tolerance [#n6d52d91] ジョイスティックのジッターの補償に使われて、toleranceの本質は「gate」です。~ それに満たないジョイスティックの動きは無視されます。dead-bandとは異なり、toleranceは軸がいったいどこで落ち着いているか、で決まります。 #br **factor [#l2b4f852] 軸の操作量に対する「倍数」です。この値が小さいと、FGFS上での操作限界に達しないコントロールしかできなくなります。~ 負の数を設定すると、軸の操作とFGFS上での動きが反対になります。デフォルト値は1.0です。~ 筆者のケースでは、スロットルを逆向き(手前に引くとスロットルを開く設定)にしたかったため、-1.0を設定しました。~ (訳注:第二次世界大戦の頃まではフランス機のように「スロットルレバーを手前に引いて開き、奥に押して閉じる」機種もあったので、それを再現するためだと思われる。ちなみに、旧日本軍は陸海軍でそれぞれ違ったそうな。) #br *コマンドマネージャ: [#ba642863] 以前のFGFSはジョイスティックの出力で直接プロパティマネージャーを操作していました。FGFS v0.7.7以降は、操作した時にイベントを発生させてコマンドを実行するように変更されました。バインディングは効果があるようなコマンドを「指定しなければなりません」。都合が良いことに、コマンドのリストは大体2種類に分けられます。 (訳注:nasalスクリプトを組み込んだ場合、大抵飛行機の制御に使われるので、とりあえず後者に分類します) #br **描画・ファイル関連 [#p0bf74c9] , コマンド ,オプション , 用途 , null , なし , 前のバインディングをクリアします。(翻訳自身なし・・・まあ使う機会もあまり無いか) , exit , なし , FGFSを終了します。 , load , ファイル名(注1) , フライトのロード , save , ファイル名(注1) , フライトのセーブ , load-panel , パス(注2) , パネルの変更/再読み込み , load-preferences , パス(注2) , 設定のロード (注3) , screen-capture , なし , ./fgfs-screen.ppmにスクリーンショットの保存 , view-cycle , なし , パイロットの視点の方向を変える -(注1)セーブ/ロードは現在の作業ディレクトリに依存します。 -(注2)パスはあなたがロードしたいファイルを含んでいて、$FG_ROOTを基準にしています。そして、それはベースパッケージの位置でもあります。デフォルト値は、/sim/panel/path (preferences.xmlより) か、preferences.xmlにセットしていないならPanel/Default/default.xmlです。デフォルト値はpreferences.xmlで設定したものになります。 -(注3)これは、何もバインディングされていないので、初めに実験するには良いかもしれません。設定を再ロードすることで、FGFSのリスタートをすることなく、色々な設定をテストすることができます。あなたは、後でそれを移動/削除することができます。 #br **飛行機の制御 [#z3a44764] , コマンド , オプション , 効果 , property-toggle , property , 指定したプロパティの値のオン/オフ(true/false)の切り替え , property-assign , property , value , 指定したプロパティの値を指定したものに変える , property-adjust , property , step , 一度操作する毎にstepだけ増やす , property-swap , property[0] , property[1] , 2つのプロパティの値を入れ替える , property-scale ,property , offset , factor , 生のジョイスティックの値を先述通り処理してプロパティに与える , nasal , script , nasalスクリプトを実行します。nasalについての詳細は[[Nasal マニュアル]]を参照してください。 #br *バインディング [#x3338d51] 一つのコマンドを<binding> </binding>で束ねることで、1つのボタン/軸に複数のコマンドを割り当てる事ができます。~ デフォルトにより、以下の例では/bindingや<binding>を使っていますが、/binding[0]や<binding n="0">の意味を含んでいます。 バインディングがXMLで指定されていると、インデックスが自動的に作成されます。もしXMLを避けたいならば、複数のバインディングに対するインデックス番号をコマンドラインオプションで指定しなければいけません。 #br *ジョイスティックの軸 [#qd615b25] これはXMLでのジョイスティックの軸の設定サンプルです: <axis n="0"> <!-- 設定したい軸の番号を指定します --> <desc>Aileron</desc> <!-- 軸の概要について (無くても可) --> <binding> <!-- バインディングを開始します。 --> <command>property-scale</command> <!-- コマンドを指定します --> <property>/controls/flight/aileron</property> <!-- 割り当てたいプロパティを指定します --> </binding> <!-- バインディングタグを閉じます --> </axis> <!-- axisタグを閉じます --> 先ほど、プロパティツリーが階層構造であると書いたことを覚えていますか? 注意深い人なら、構造を保つにはタグを入れ子にする必要がある事に気付くでしょう。~ このバインディングが/input/joysticks/js/ のコンテキストに現れるので、同等のコマンドラインのオプションでは以下のようになり、省略可能な'desc'以外が現れると言う点で同じです。 --prop:/input/joysticks/js[0]/axis[0]/binding/command=property-scale --prop:/input/joysticks/js[0]/axis[0]/binding/property=/controls/flight/aileron コマンドラインオプションで階層構造を表現するためにどのようにパスを使用しているか見てみましょう。~ すばらしいと思ったら、次はREADME.xmlpanelを読んでください。FGFSのXMLの設定は簡単で、(訳注:何かを作ってくれる事が)ユーザー全員のためにもなります。 #br 本題に戻りましょう。"property-scale"コマンドは"offset"、"factor"の値を認識します。以下の例では"type"の値で、double形(倍精度浮動小数)を指定しています。~ double形の方がよりステップがはっきり区別されていて、単なるfloat形よりも滑らかな動作をさせます。 <axis n="2"> <desc>Throttle</desc> <!-- 下記の「dead-bandについての重要事項」も見てください --> <binding> <command>property-scale</command> <property>/controls/engines/engine[0]/throttle</property> <offset type="double">-1.0</offset> <factor type="double">-0.5</factor> </binding> </axis> もしくは --prop:/input/joysticks/js[0]/axis[2]/binding/command=property-scale --prop:/input/joysticks/js[0]/axis[2]/binding/property=/controls/engines/engine[0]/throttle --prop:/input/joysticks/js[0]/axis[2]/binding/offset=-1.0 --prop:/input/joysticks/js[0]/axis[2]/binding/factor=-0.5 **dead-bandについての重要事項 [#sef7dec7] あなたは、先述の「ジョイスティックの値を修正する」セクションに書かれていた通り、dead-bandがコマンドマネージャの外で実行されることを思い出してください。~ これは、デッドバンドを適用したいなら、dead-bandタグが他のタグに先行しなければならないことを意味します。もしコマンドラインを使用するなら、'binding'を省略し、同様に下記のようにしてください。~ --prop:/input/joysticks/js[0]/axis[2]/dead-band=0.005 #br *ジョイスティックのボタンのプロパティ [#r52cc4a0] ボタンは本来ブーリアン型(true,falseの2つの値だけで表すデータ形式で、少しの事に使うことができます。これによって、瞬間的な動作、繰り替えし動作、普通の切り替え操作に使うことが出来ます。簡単にそれらができるように、ボタンの機能を変更するいくつかのタグがあります。 **<repeatable> [#udf46e42] -trueかfalseを指定します。trueだった場合、ボタン(orキー)を押している間、繰り返しイベントが発生します。下記の例では、押している間中イベントが発生し続け、その結果、押している間中トリムが変化します。falseだった場合、押し続けても、1度だけイベントが発生します。デフォルトではfalseです。 **<step> [#qc7c8989] -proparty-adjustコマンドに、一度ボタンを押すごとに変化する量を指定します。下記の例ではイベントが1度発生するごとにエレベータトリムを0.1%動かします。(リピートしなければ、指がかなり痛くなるでしょう。) **<value> [#w73e617d] -繰り返しイベントでない場合、押した結果プロパティに与えられる値を指定します。 **<mod-up> [#xd6179bd] -これは、"modifier up"を表していて、筆者は気に入っています。 これは、あなたがキーを「ボタン/キーを離した時」のためにバインディングを準備するのに使用します。これは何かと便利です。 このサンプルは、XMLでのジョイスティックのボタンの宣言です。 <button n="1"> <!-- どのボタンかを指定します --> <desc>Elevator trim up</desc> <!-- ボタンの概要(必須ではありません) --> <repeatable>true</repeatable> <!-- Ok, repeatableの指定はコマンドマネージャの外でも可能です --> <binding> <!-- バインディングを開始します--> <command>property-adjust</command> <!-- コマンドを指定します。--> <property>/controls/flight/elevator-trim</property> <!-- 操作するプロパティを指定します--> <step type="double">0.001</step> </binding> </button> コマンドラインでは、以下のようになります。 --prop:/input/joysticks/js[0]/button[1]/repeatable=true <-- 見ての通り'binding'はありません --> --prop:/input/joysticks/js[0]/button[1]/binding/command=property-adjust --prop:/input/joysticks/js[0]/button[1]/binding/property=/controls/flight/elevator-trim --prop:/input/joysticks/js[0]/button[1]/binding/step=0.001 これは多少高度な設定例で、ボタン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> <!-- ブレーキは1.0に設定されます --> </binding> <mod-up> <!-- パーキングブレーキではないので、ボタンを離したら解除される必要があります --> <binding> <command>property-assign</command> <property>/controls/gear/brake-left</property> <value type="double">0.0</value> <!-- 1.0 がONで、0.0 がオフです --> </binding> </mod-up> </button> 初めのバインディングは簡単です:ボタンを押したら、property-assignコマンドが左ブレーキのプロパティ(この例では、/controls/gear/brake-left)の持つ値を1.0(この場合、フルブレーキ)に設定します。~ しかし、次のバインディングは"mod-up"要素の入れ子の中にあり、ボタンを離したときに'property-assign'コマンドが実行され、左ブレーキの値を0.0(この場合、解除)に設定します。~ 同じ値を何度も割り当てないように、"repeatable"はデフォルトでオフになっています。 コマンドラインのオプションで同じことをするなら: --prop:/input/joysticks/js[0]/button[4]/binding/command=property-assign --prop:/input/joysticks/js[0]/button[4]/binding/property=/controls/gear/brake-left --prop:/input/joysticks/js[0]/button[4]/binding/value=1.0 --prop:/input/joysticks/js[0]/button[4]/mod-up/binding/command=property-assign --prop:/input/joysticks/js[0]/button[4]/mod-up/binding/property=/controls/gear/brake-left --prop:/input/joysticks/js[0]/button[4]/mod-up/binding/value=0.0 各コンテキスト中に複数のバインディングを含むことができることを覚えておいてください。ここに、ボタン0が押された時に左右両方のブレーキを掛け、ボタンを離すと両方のブレーキが解除される、高度な例を挙げます。 <button n="0"> <desc>Brakes</desc> <binding> <command>property-assign</command> <property>/controls/gear/brake-left</property> <value type="double">1.0</value> </binding> <binding> <command>property-assign</command> <property>/controls/gear/brake-right</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> <binding> <command>property-assign</command> <property>/controls/gear/brake-right</property> <value type="double">0.0</value> </binding> </mod-up> </button> これをXMLを使わず、同じことをコマンドラインオプションでやろうとするとこうなります。~ (複数のバインディングを区別するための添え字に注意してください;XMLは、自動的にこれをやってくれます。):~ --prop:/input/joysticks/js[0]/button[0]/binding[0]/command=property-assign --prop:/input/joysticks/js[0]/button[0]/binding[0]/property=/controls/gear/brake-left --prop:/input/joysticks/js[0]/button[0]/binding[0]/value=1.0 --prop:/input/joysticks/js[0]/button[0]/binding[1]/command=property-assign --prop:/input/joysticks/js[0]/button[0]/binding[1]/property=/controls/gear/brake-right --prop:/input/joysticks/js[0]/button[0]/binding[2]/value=1.0 --prop:/input/joysticks/js[0]/button[0]/mod-up/binding[0]/command=property-assign --prop:/input/joysticks/js[0]/button[0]/mod-up/binding[0]/property=brakes[0] --prop:/input/joysticks/js[0]/button[0]/mod-up/binding[0]/value=0.0 --prop:/input/joysticks/js[0]/button[0]/mod-up/binding[1]/command=property-assign --prop:/input/joysticks/js[0]/button[0]/mod-up/binding[1]/property=brakes[1] --prop:/input/joysticks/js[0]/button[0]/mod-up/binding[1]/value=0.0 #br *デジタルHATスイッチ [#u268fad3] 多くのジョイスティックにはHATスイッチが付いています。これは軸というより、単に4つ(or8つ)のボタンですが、FGFSでは各軸の末端にそれぞれ仮想的なボタンを与えていて、これらの仮想ボタンは"low"と"high"の下位のプロパティを通して指定することができるので、一般のボタンのプロパティのどれでも受け入れることができます。~ たとえば、あなたがちょうど表示方向をコントロールしたいならば、あなたは/sim/view/axes/long と /sim/view/axes/latのために、2本の軸を割り当てる事ができます。 <axis n="5"> <binding> <command>property-adjust/command> <property>/sim/view/axes/lat</property> <step>2.0</step> </binding> </axis> <axis n="6"> <binding> <command>property-adjust</command> <property>/sim/view/axes/long</property> <step>2.0</step> </binding> </axis> もしくは --prop:/input/joysticks/js/axis[5]/binding/command=property-scale --prop:/input/joysticks/js/axis[5]/binding/property=/sim/view/axes/lat --prop:/input/joysticks/js/axis[5]/binding/step=2.0 --prop:/input/joysticks/js/axis[6]/binding/command=property-scale --prop:/input/joysticks/js/axis[6]/binding/property=/sim/view/axes/long --prop:/input/joysticks/js/axis[5]/binding/step=2.0 (訳注:この記述、特にプロパティ名は古いです。) 他にも、垂直/水平に2Dパネルをスクロールするために、ボタンとしてHATスイッチを使用したいなら、あなたは<high>と<low>を使用できます。 下記の例は、<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> --prop:/input/joysticks/js/axis[1]/low/repeatable=true --prop:/input/joysticks/js/axis[1]/low/binding/command=property-adjust --prop:/input/joysticks/js/axis[1]/low/binding/property=/controls/flight/elevator-trim --prop:/input/joysticks/js/axis[1]/low/binding/step=0.001 --prop:/input/joysticks/js/axis[1]/high/repeatable=true --prop:/input/joysticks/js/axis[1]/high/binding/command=property-adjust --prop:/input/joysticks/js/axis[1]/high/binding/property=/controls/flight/elevator-trim --prop:/input/joysticks/js/axis[1]/high/binding/step=-0.001 下のコマンドラインオプションで、リピート間隔を設定できます。リピート間隔を0.05秒にした場合、1秒間に20回繰り返されます。それには、下のオプションを追加してください。 --prop:/input/joysticks/js/axis[1]/interval-sec=0.05 あなたは、いくつかの軸をブレーキに割り当てる事ができます。そのためには、0.0(ブレーキ無し)と1.0の間の位置を使うことができます(フルブレーキ) *キーボードの設定 [#k1d54a0b] キーボードのキーバインディングは、以下の例のようにジョイスティックのボタンのバインディングとほとんど同じです(コンテキストは/input/keyboardです): <key n="1"> <name>Ctrl-A</name> <desc>Toggle autopilot altitude lock.</desc> <binding> <command>property-toggle</command> <property>/autopilot/locks/altitude</property> </binding> </key> あなたはまず、いくつかの事に気が付くでしょう。 最初に、インデックス(<key n="'''m'''">)で、あなたがバインディングする主要なコードを指定します。この例では、'''1'''は<name>で指定しているように、Ctrl+Aに相当します。~ 一般的にキーコードは255まであり、256より上はファンクションキー(F'''n''')や矢印キー等の特別なキーを意味します。~ 下記に、同じ働きのコマンドラインオプションを書きます。 --prop:/input/keyboard/key[1]/binding/command=property-toggle --prop:/input/keyboard/key[1]/binding/property=/autopilot/locks/altitude ('propaty-toggle'コマンドは、trueとfalseの切り替えを行います。従って、プロパティ値以外の物は要りません。)インデックスを省略しないでください!!! 2つ目は、キーの方がジョイスティックのボタンよりも多くの修飾が出来ます。"mod-up"(キーを離した時に作動)に加えて、キーの場合は"mod-alt", "mod-ctrl", "mod-shift" を使う事ができます。~ 下に例を示します。 <key n="49"> <name>1</name> <mod-shift> <desc>Look back left</desc> <binding> <command>property-assign</command> <property>/sim/view/goal-offset</property> <value type="double">135</value> </binding> </mod-shift> </key> この例では、'1'キーとShiftキーを同時に押した場合に、左後ろを見るように視界を切り替えます。~ 注意:これはテンキーの1でしか動きません。テンキーで無く'q'キーの上にある'1'の場合、(当然ながら)'!'のキーコードを送ります~ FightGearの使っているinputモジュールは、controlとshiftの同時押しを自動で取得するよう試みます。 --メモ: 32より小さいキーコードはコントロールキャラクタを暗に含むので、以前はctrl-Aのバインディングに入れ子の"mod-ctrl"要素を使う必要はありませんでした。(翻訳自信なし) また、新しい入力モジュールは、キーボードのkey-upイベントを検出できるので、タッチに敏感なブレーキ等もジョイスティックと同じように記述できます。 <key n="44"> <name>,</name> <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> </key> 今度は、別の方法でブレーキの設定のバインディングをします。この例では、<mod-up>タグが無いので、パーキングブレーキのように働きます。 <key n="66"> <name>B</name> <desc>Toggle parking brake on or off</desc> <binding> <command>property-toggle</command> <property>/controls/gear/brake-parking</property> </binding> </key> *nasalスクリプトの使い方 [#rfd4c248] 注意:この項はsambarが勝手に追加したものです。 FlightGearには、Nasal というスクリプト言語が実装されていて、ジョイスティックやキーボードの設定ファイルに組み込んだり、あるいは設定ファイルから呼び出したりしてスクリプトを実行する事ができます。~ ここでは、Nasalスクリプトそのものの詳しい説明は省略し、既にあるスクリプトの呼び出し方の解説に留めます。~ Nasalについての詳しい説明は[[Nasal マニュアル]]を参照してください。 これは、ボタン5にギアダウンを割り当てる時の設定です。(Input/Joysticks/CH/pro-yoke-usb.xmlより) <button n="5"> <desc>Gear down</desc> <repeatable>false</repeatable> <binding> <command>nasal</command> <!--ここで、nasalを使用しますよ〜、と宣言 --> <script>controls.gearDown(1)</script> <!-- <script>と、</script>の間に実行したいスクリプトを書いてください。 </binding> <mod-up> <binding> <command>nasal</command> <script>controls.gearDown(0)</script> </binding> </mod-up> </button> これは、$FGROOT/nasal/controls.nas内のgearDown関数に、ボタンを押した時に1、ボタンを離したら0を引数として与えて実行しています。 var gearDown = func(v) { if (v < 0) { setprop("/controls/gear/gear-down", 0); } elsif (v > 0) { setprop("/controls/gear/gear-down", 1); } } この関数では、与えた引数が正なら車輪を下げ、負なら車輪を上げます。なお、ゼロなら何もせず現状を維持します。 つまり、この例では"property-assign"を使って、同じ動作をさせるバインディングは以下のようにも書けます。 <button n="5> <desc>Gear down</desc> <repeatable>false</repeatable> <binding> <command>property-assign</command> <property>/controls/gear/gear-down</property> <value>1<value> </binding> </button> なお、「どちらのアプローチで書くのが良いか」については残念ながら「やりたい事次第」としかお答えできませんが、例えば「エレベータにGリミッターを付け加えたい」場合など、やや複雑な処理をしたい場合には後者のアプローチの方が良いでしょう。 ----- 翻訳開始 2009/03/22 sambar~ 仮翻訳終了。 2009/03/24 sambar~ 「[Help]>[Joystick Information]の情報からジョイスティックの情報を集める」を追加 2009/03/25 sambar~ 「nasalの使用方法」を追加 2009/03/26 sambar~ リンク忘れ修正 2009/03/28 sambar~ 表現の修正 2009/03/29 ~
画像と同じ番号を入力 :
[[翻訳作業場トップページ]] このドキュメントは $FG_ROOT/Docs/Readme.Joysticks.htmlの日本語訳です。 ---- #contents #br *ジョイスティック・キーボードの設定方法 [#d239370e] version 0.9.8.1 13/10/2005 Author John Check (FlightGear1.9.1添付バージョン) この文書はFlightGear0.7.7以降を対象として書かれています。 ジョイスティックがあなたのOS上で正常に認識され、動作しているという前提で書いています。この文書はLinuxユーザーの視点で書かれていますが、しかしこの情報は他のプラットフォームでも有効です。~ (訳注:訳者はWindowsVistaユーザーです。)~ David Megginsonに感謝します。誰がXMLの実装をしたかはさておき、彼の解説資料はスマートに見えました。~ #br *いくつかの歴史 [#ye2ba402] 初期のFGFSのジョイスティックの軸(Axis)/ボタン(button)と、キーバインディングはハードコードされていました。もしデフォルトのジョイスティックの設定を使用しない、もしくは違うキーバインディングを使いたい場合、ソースコードを修正して再コンパイルする必要がありました。~ 幸運な事に、v0.7.5.aの頃に"プロパティマネージャ"が与えられ、ジョイスティックで簡単にパラメータをセットできるようになりました。~ バージョン0.7.7ではプロパティマネージャの役割が拡張され、イベントとコマンドを束ねることが出来るようになりました。~ このコードは、FGInputとして知られていて、ジョイスティックと同様にキーボードのコマンドバインディングを構成するのに使用されます。~ バージョン0.7.9では条件付けが許容され、編集された決定ツリーを加えました。(修正希望)~ #br *最も重要な事: [#a1f4d364] 私は、ジョイスティックとキーボードについては後で書くつもりです。~ FGInputは一般的なものを十分に扱えます。それは、ジョイスティックのボタンとキーボードのイベントを同様に扱います。~ さまざまな方法でキーボードまたはジョイスティックのバインディングを記憶できます。使える方法は以下のとおりです:~ , ソース , 場所 , 書式 , 有効範囲 ,command line , STDIN , see examples , そのセッションのみ ,.fgfsrc , ~/ , コマンドラインオプション , 現在のユーザーのみ ,system.fgfsrc , $FG_ROOT , コマンドラインオプション , システム全体 ,joystick.xml , $FG_ROOT , XMLプロパティリスト , システム全体 ,keyboard.xml , $FG_ROOT , XMLプロパティリスト , システム全体 訳者注:以降、joystick.xmlとkeyboard.xmlについての解説が主体となります。~ #br *XMLについて [#w26b48de] あなたがこれを疑問に思っている時のために、XMLは「eXtensible Markup Language」と書いておきます。~ これは、HTMLに非常に似ていますが、(訳者追記:XML文書に使う場合に限って言えば)あなた自身で定義したタグを使用できます。~ さて、FGFSの場合では、私たちはあなたがジョイスティック/キーボードを構成するために必要とするタグを定義しました。XMLは階層的に組織化された構造を記述するのに適しています。FGFSで使用しているプロパティツリーのような、外部のアプリケーションへの内容です。あなたは、FGFSのためにXMLファイルを設定するには、以下の開始タグと終了タグをペアで記述しなければなりません。~ <PropertyList> <!-- HTMLと同じように、<!-- -->で囲った部分はコメントです。 --> </PropertyList> #br *[Help]>[Joystick Information]の情報からジョイスティックの情報を集める [#ma517d6c] 注意:この項は原文が現状に追いついていないため、sambarが追加したものです。~ 今まではjs_demoでしかジョイスティックの情報を得ることが出来ませんでしたが、1.9.0ではもっと楽な方法があります。現在の段階ではまだ限られた情報しか得られませんが、いずれ改善されるでしょう。~ +ジョイスティックの各軸、特にスロットルレバーを0点としたい位置にしてください。 エルロンやエレベータは何もしなくても勝手に中心に来るでしょう。 +FlightGearを起動してください。 +FlightGearの画面の上部にあるメニューバーの、 [Help]を開き、その中の[Joystick Information]を選択してください。 +すると、以下のようなメニューが出るはずです。 (画像をここに貼り付ける予定。) これは、WindowsVista(x64)でCH Products製のヨークとラダーをジョイスティックに繋いだときの物です。WindowsVistaやXPでは、現在ジョイスティックの自動認識が正常に機能せず、日本語環境では「Joystick#0: Microsoft PC *W***C*X*e*B*b*N *h」と表示されることがあります。対処法は後述します。 幸運にも文字化けせずに、接続したジョイスティックの名前を検出できた場合は、それを元に自動で認識できるので、 読み込んだファイル名を確認して、正しいジョイスティック定義ファイルを読み込んでいるか確認してください。 **もし正しいジョイスティック定義ファイルを読み込まず、デフォルトのジョイスティック定義ファイルを読み込んでいる場合 [#t21fc95a] +まず、検出されたジョイスティック名をメモする。例えば、Saitek X45を「Saitek X45 Flight Controller」として検出している場合、それをメモしておきます。 +ジョイスティックのメーカー名と、検出された名前を元に、$FGROOT/Input/Joysticks/'''メーカー名'''/'''製品名'''.xml(この場合、$FGROOT/Input/Joysticks/Saitek/X45.xml)を探して、それを開いてください。無ければ「ジョイスティック定義ファイルが無い場合」へ進んでください。 +「定義ファイルはあるし、ジョイスティック名も正常に検出しているにもかかわらず、自動でそれを読み込まない」状態ですので、先ほどメモしたジョイスティック名を以下の要領で追加してください。 <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> <!--ここが追加した行 --> **「Joystick#0: Microsoft PC *W***C*X*e*B*b*N *h」と文字化けして表示された時の対処法 [#zac264d4] $FGROOT/Joysticks.xmlを以下の要領で修正し、読み込むべきジョイスティック定義ファイルを手動で指定すると良いでしょう。 <js n="0" include="Input/Joysticks/Saitek/ST290-Pro.xml"/> もし適切なジョイスティック定義ファイルが見当たらない場合には「ジョイスティック定義ファイルが無い場合」を読んでください。 **ジョイスティック定義ファイルが無い場合 [#o0c52817] $FGROOT/input/Joysticks/Default/four-axis-joystick.xml内の<name>タグを、先ほどの[Joystick Information]で取得した自分のジョイスティック名に書き換えれば、「一応」飛べるようになります。 ただし、ジョイスティック名が文字化けしていた場合には、このファイルは「とりあえず」何もしないでおき、$FGROOT/Joysticks.xmlを以下のように書き換えてください。 <js n="0" include="Input/Joysticks/Default/four-axis-joystick.xml"/> そして、画面上の「Aileron」「Elevator」「Throttle」「Rudder」の数値を監視しながら、色々な軸を操作してください。 #br *js_demoを使用して、ジョイスティックの出力をどのプロパティに割り当てるか決める [#c43303c1] FlightGearには、かつてjs_demoユーティリティが同梱されていました。(1.9.0以降は同梱されていませんが、toshiさんのご好意により、[[FlightGear JPにアップロードされています:http://flightgear.jpn.org/modules/d3downloads/index.php?page=visit&cid=6&lid=20]])~ これは、ジョイスティックの数と能力について調査する強力なツールです。~ ジョイスティックを操作しながらjs_demoの出力を監視すれば、軸/ボタンに対して割り当てる操作を決める事ができます。~ 一般的に、*NIX環境では付番がゼロから始まることに注意してください。 以下の例では、システムで、1個のジョイスティック(js0)を接続します。この出力は、4ボタンとスロットル付きのアナログGravis BlackHawkジョイスティックの物です。~ js_demoの典型的な出力 Joystick test program. ~~~~~~~~~~~~~~~~~~~~~~ Joystick 1 not detected <!-- ジョイスティック番号は0から始まります --> Joystick 2 not detected +--------------JS.0--------------+ | Btns Ax:0 Ax:1 Ax:2 | +--------------------------------+ | 0000 +0.0 +0.0 -1.0 | js_demoの内部では、button0は2進数で1の位、button1は2の位、button2は4の位・・・と扱われますが、画面上では16進数で表されます。 ,画面表示(16進数),押したボタン,2進数での表現(参考) ,0001,button 0,000000000000001 ,0002,button 1,000000000000010 ,0004,button 2,000000000000100 ,0008,button 3,000000000001000 ,0010,button 4,000000000010000 ,0020,button 5,000000000100000 ,0040,button 6,000000001000000 ,0080,button 7,000000010000000 ,000a,button 1 と button 3 の同時押し,000000000001010 ・・・といった要領で8000(button 15)まで続きます。 (訳注:16進数で表示されることを強調するため、0014から000aに変更) #br *デフォルトでのジョイスティックのプロパティ [#f5c9d9eb] -Axis 0 = エルロン -Axis 1 = エレベータ -Axis 2 = ラダー -Axis 3 = スロットル -Button 0 = 両車輪のブレーキ -Button 1 = エレベータトリム (up) -Button 2 = エレベータトリム (down) #br *じゃあ、今度は何をするか [#x0b59a46] 先ほど集めたUSBジョイスティック(orジョイスティックポート)からの出力が何であるか分かったので、あなたは多分FGInputを今すぐ使いたいと思っているでしょう。もしこれ以前のFGFSのバージョンでジョイスティックを設定するのに慣れているなら、あなたは「コマンドマネージャ」セクションまでスキップできます。~ もし、新しいFGFSユーザーなら、いくつかの概念を理解するために次の項を読んでください。それはまた、コマンドマネージャでまだ実装されていない、古いジョイスティックオプションをカバーします。~ #br *「生」のジョイスティックの値を修正する [#cbc006b8] これらのコンセプトは、ジョイスティックバインディングに理由付けする事です。~ 生の値をそのままジョイスティックの軸として使う事が適切でない場合があります。また、ベストパフォーマンスを得るために実験を重ねる場合、基本概念があなたを救うことを理解してください。~ また、全てのジョイスティックが同じ状態で作られるとは限りません。(訳注:必ず製造時に誤差を含んでいます) 軸のプロパティに対する修正順序はこのようになっています。 +生のジョイスティックの値 +デッドゾーン(dead-band,入力を無視する範囲)をフィルタリングします。(deadbandは、コマンドマネージャの外で実行されます。) +オフセット(offset,中心からのズレ)を修正します。 +3までの値に、factorを乗算します。 +この結果が得られた値を、FlightGearのプロパティのコントロールに使用します。 別の表現をすれば、下記のようになります。 cooked_value = (( raw_value > dead-band ) + offset) * factor 軸のプロパティは以下の通りです。 #br **dead-band [#sb679174] -1 0 1 ............... -1 | | 1 ^ dead-band このエリア内の信号は無視されます。どんな信号も無視される範囲を作成することによってノイズや、品質の悪い電圧計/可変抵抗を補います。dead-bandは0位置に依存します。~ デフォルトの、エレベーターとエルロンのための0.1の設定はガク引きに対して寛容です。数値を小さくすると、よりきつい感じをもたらします。 スロットル等、いくつかの場合では、あなたはdead-bandを設定したがっていないかもしれません。 この場合0.0の値を使用してください。 #br **offset [#y0ee6b80] -1 0 1 ............. -1 ^ 1 offset 軸の操作範囲を広げたい場合に使用します。スロットル等、0が最小値になる場合で、ラダー等とは違ってセンターが無い場合に使用します。標準的には-1.0を使用します。 #br **tolerance [#n6d52d91] ジョイスティックのジッターの補償に使われて、toleranceの本質は「gate」です。~ それに満たないジョイスティックの動きは無視されます。dead-bandとは異なり、toleranceは軸がいったいどこで落ち着いているか、で決まります。 #br **factor [#l2b4f852] 軸の操作量に対する「倍数」です。この値が小さいと、FGFS上での操作限界に達しないコントロールしかできなくなります。~ 負の数を設定すると、軸の操作とFGFS上での動きが反対になります。デフォルト値は1.0です。~ 筆者のケースでは、スロットルを逆向き(手前に引くとスロットルを開く設定)にしたかったため、-1.0を設定しました。~ (訳注:第二次世界大戦の頃まではフランス機のように「スロットルレバーを手前に引いて開き、奥に押して閉じる」機種もあったので、それを再現するためだと思われる。ちなみに、旧日本軍は陸海軍でそれぞれ違ったそうな。) #br *コマンドマネージャ: [#ba642863] 以前のFGFSはジョイスティックの出力で直接プロパティマネージャーを操作していました。FGFS v0.7.7以降は、操作した時にイベントを発生させてコマンドを実行するように変更されました。バインディングは効果があるようなコマンドを「指定しなければなりません」。都合が良いことに、コマンドのリストは大体2種類に分けられます。 (訳注:nasalスクリプトを組み込んだ場合、大抵飛行機の制御に使われるので、とりあえず後者に分類します) #br **描画・ファイル関連 [#p0bf74c9] , コマンド ,オプション , 用途 , null , なし , 前のバインディングをクリアします。(翻訳自身なし・・・まあ使う機会もあまり無いか) , exit , なし , FGFSを終了します。 , load , ファイル名(注1) , フライトのロード , save , ファイル名(注1) , フライトのセーブ , load-panel , パス(注2) , パネルの変更/再読み込み , load-preferences , パス(注2) , 設定のロード (注3) , screen-capture , なし , ./fgfs-screen.ppmにスクリーンショットの保存 , view-cycle , なし , パイロットの視点の方向を変える -(注1)セーブ/ロードは現在の作業ディレクトリに依存します。 -(注2)パスはあなたがロードしたいファイルを含んでいて、$FG_ROOTを基準にしています。そして、それはベースパッケージの位置でもあります。デフォルト値は、/sim/panel/path (preferences.xmlより) か、preferences.xmlにセットしていないならPanel/Default/default.xmlです。デフォルト値はpreferences.xmlで設定したものになります。 -(注3)これは、何もバインディングされていないので、初めに実験するには良いかもしれません。設定を再ロードすることで、FGFSのリスタートをすることなく、色々な設定をテストすることができます。あなたは、後でそれを移動/削除することができます。 #br **飛行機の制御 [#z3a44764] , コマンド , オプション , 効果 , property-toggle , property , 指定したプロパティの値のオン/オフ(true/false)の切り替え , property-assign , property , value , 指定したプロパティの値を指定したものに変える , property-adjust , property , step , 一度操作する毎にstepだけ増やす , property-swap , property[0] , property[1] , 2つのプロパティの値を入れ替える , property-scale ,property , offset , factor , 生のジョイスティックの値を先述通り処理してプロパティに与える , nasal , script , nasalスクリプトを実行します。nasalについての詳細は[[Nasal マニュアル]]を参照してください。 #br *バインディング [#x3338d51] 一つのコマンドを<binding> </binding>で束ねることで、1つのボタン/軸に複数のコマンドを割り当てる事ができます。~ デフォルトにより、以下の例では/bindingや<binding>を使っていますが、/binding[0]や<binding n="0">の意味を含んでいます。 バインディングがXMLで指定されていると、インデックスが自動的に作成されます。もしXMLを避けたいならば、複数のバインディングに対するインデックス番号をコマンドラインオプションで指定しなければいけません。 #br *ジョイスティックの軸 [#qd615b25] これはXMLでのジョイスティックの軸の設定サンプルです: <axis n="0"> <!-- 設定したい軸の番号を指定します --> <desc>Aileron</desc> <!-- 軸の概要について (無くても可) --> <binding> <!-- バインディングを開始します。 --> <command>property-scale</command> <!-- コマンドを指定します --> <property>/controls/flight/aileron</property> <!-- 割り当てたいプロパティを指定します --> </binding> <!-- バインディングタグを閉じます --> </axis> <!-- axisタグを閉じます --> 先ほど、プロパティツリーが階層構造であると書いたことを覚えていますか? 注意深い人なら、構造を保つにはタグを入れ子にする必要がある事に気付くでしょう。~ このバインディングが/input/joysticks/js/ のコンテキストに現れるので、同等のコマンドラインのオプションでは以下のようになり、省略可能な'desc'以外が現れると言う点で同じです。 --prop:/input/joysticks/js[0]/axis[0]/binding/command=property-scale --prop:/input/joysticks/js[0]/axis[0]/binding/property=/controls/flight/aileron コマンドラインオプションで階層構造を表現するためにどのようにパスを使用しているか見てみましょう。~ すばらしいと思ったら、次はREADME.xmlpanelを読んでください。FGFSのXMLの設定は簡単で、(訳注:何かを作ってくれる事が)ユーザー全員のためにもなります。 #br 本題に戻りましょう。"property-scale"コマンドは"offset"、"factor"の値を認識します。以下の例では"type"の値で、double形(倍精度浮動小数)を指定しています。~ double形の方がよりステップがはっきり区別されていて、単なるfloat形よりも滑らかな動作をさせます。 <axis n="2"> <desc>Throttle</desc> <!-- 下記の「dead-bandについての重要事項」も見てください --> <binding> <command>property-scale</command> <property>/controls/engines/engine[0]/throttle</property> <offset type="double">-1.0</offset> <factor type="double">-0.5</factor> </binding> </axis> もしくは --prop:/input/joysticks/js[0]/axis[2]/binding/command=property-scale --prop:/input/joysticks/js[0]/axis[2]/binding/property=/controls/engines/engine[0]/throttle --prop:/input/joysticks/js[0]/axis[2]/binding/offset=-1.0 --prop:/input/joysticks/js[0]/axis[2]/binding/factor=-0.5 **dead-bandについての重要事項 [#sef7dec7] あなたは、先述の「ジョイスティックの値を修正する」セクションに書かれていた通り、dead-bandがコマンドマネージャの外で実行されることを思い出してください。~ これは、デッドバンドを適用したいなら、dead-bandタグが他のタグに先行しなければならないことを意味します。もしコマンドラインを使用するなら、'binding'を省略し、同様に下記のようにしてください。~ --prop:/input/joysticks/js[0]/axis[2]/dead-band=0.005 #br *ジョイスティックのボタンのプロパティ [#r52cc4a0] ボタンは本来ブーリアン型(true,falseの2つの値だけで表すデータ形式で、少しの事に使うことができます。これによって、瞬間的な動作、繰り替えし動作、普通の切り替え操作に使うことが出来ます。簡単にそれらができるように、ボタンの機能を変更するいくつかのタグがあります。 **<repeatable> [#udf46e42] -trueかfalseを指定します。trueだった場合、ボタン(orキー)を押している間、繰り返しイベントが発生します。下記の例では、押している間中イベントが発生し続け、その結果、押している間中トリムが変化します。falseだった場合、押し続けても、1度だけイベントが発生します。デフォルトではfalseです。 **<step> [#qc7c8989] -proparty-adjustコマンドに、一度ボタンを押すごとに変化する量を指定します。下記の例ではイベントが1度発生するごとにエレベータトリムを0.1%動かします。(リピートしなければ、指がかなり痛くなるでしょう。) **<value> [#w73e617d] -繰り返しイベントでない場合、押した結果プロパティに与えられる値を指定します。 **<mod-up> [#xd6179bd] -これは、"modifier up"を表していて、筆者は気に入っています。 これは、あなたがキーを「ボタン/キーを離した時」のためにバインディングを準備するのに使用します。これは何かと便利です。 このサンプルは、XMLでのジョイスティックのボタンの宣言です。 <button n="1"> <!-- どのボタンかを指定します --> <desc>Elevator trim up</desc> <!-- ボタンの概要(必須ではありません) --> <repeatable>true</repeatable> <!-- Ok, repeatableの指定はコマンドマネージャの外でも可能です --> <binding> <!-- バインディングを開始します--> <command>property-adjust</command> <!-- コマンドを指定します。--> <property>/controls/flight/elevator-trim</property> <!-- 操作するプロパティを指定します--> <step type="double">0.001</step> </binding> </button> コマンドラインでは、以下のようになります。 --prop:/input/joysticks/js[0]/button[1]/repeatable=true <-- 見ての通り'binding'はありません --> --prop:/input/joysticks/js[0]/button[1]/binding/command=property-adjust --prop:/input/joysticks/js[0]/button[1]/binding/property=/controls/flight/elevator-trim --prop:/input/joysticks/js[0]/button[1]/binding/step=0.001 これは多少高度な設定例で、ボタン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> <!-- ブレーキは1.0に設定されます --> </binding> <mod-up> <!-- パーキングブレーキではないので、ボタンを離したら解除される必要があります --> <binding> <command>property-assign</command> <property>/controls/gear/brake-left</property> <value type="double">0.0</value> <!-- 1.0 がONで、0.0 がオフです --> </binding> </mod-up> </button> 初めのバインディングは簡単です:ボタンを押したら、property-assignコマンドが左ブレーキのプロパティ(この例では、/controls/gear/brake-left)の持つ値を1.0(この場合、フルブレーキ)に設定します。~ しかし、次のバインディングは"mod-up"要素の入れ子の中にあり、ボタンを離したときに'property-assign'コマンドが実行され、左ブレーキの値を0.0(この場合、解除)に設定します。~ 同じ値を何度も割り当てないように、"repeatable"はデフォルトでオフになっています。 コマンドラインのオプションで同じことをするなら: --prop:/input/joysticks/js[0]/button[4]/binding/command=property-assign --prop:/input/joysticks/js[0]/button[4]/binding/property=/controls/gear/brake-left --prop:/input/joysticks/js[0]/button[4]/binding/value=1.0 --prop:/input/joysticks/js[0]/button[4]/mod-up/binding/command=property-assign --prop:/input/joysticks/js[0]/button[4]/mod-up/binding/property=/controls/gear/brake-left --prop:/input/joysticks/js[0]/button[4]/mod-up/binding/value=0.0 各コンテキスト中に複数のバインディングを含むことができることを覚えておいてください。ここに、ボタン0が押された時に左右両方のブレーキを掛け、ボタンを離すと両方のブレーキが解除される、高度な例を挙げます。 <button n="0"> <desc>Brakes</desc> <binding> <command>property-assign</command> <property>/controls/gear/brake-left</property> <value type="double">1.0</value> </binding> <binding> <command>property-assign</command> <property>/controls/gear/brake-right</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> <binding> <command>property-assign</command> <property>/controls/gear/brake-right</property> <value type="double">0.0</value> </binding> </mod-up> </button> これをXMLを使わず、同じことをコマンドラインオプションでやろうとするとこうなります。~ (複数のバインディングを区別するための添え字に注意してください;XMLは、自動的にこれをやってくれます。):~ --prop:/input/joysticks/js[0]/button[0]/binding[0]/command=property-assign --prop:/input/joysticks/js[0]/button[0]/binding[0]/property=/controls/gear/brake-left --prop:/input/joysticks/js[0]/button[0]/binding[0]/value=1.0 --prop:/input/joysticks/js[0]/button[0]/binding[1]/command=property-assign --prop:/input/joysticks/js[0]/button[0]/binding[1]/property=/controls/gear/brake-right --prop:/input/joysticks/js[0]/button[0]/binding[2]/value=1.0 --prop:/input/joysticks/js[0]/button[0]/mod-up/binding[0]/command=property-assign --prop:/input/joysticks/js[0]/button[0]/mod-up/binding[0]/property=brakes[0] --prop:/input/joysticks/js[0]/button[0]/mod-up/binding[0]/value=0.0 --prop:/input/joysticks/js[0]/button[0]/mod-up/binding[1]/command=property-assign --prop:/input/joysticks/js[0]/button[0]/mod-up/binding[1]/property=brakes[1] --prop:/input/joysticks/js[0]/button[0]/mod-up/binding[1]/value=0.0 #br *デジタルHATスイッチ [#u268fad3] 多くのジョイスティックにはHATスイッチが付いています。これは軸というより、単に4つ(or8つ)のボタンですが、FGFSでは各軸の末端にそれぞれ仮想的なボタンを与えていて、これらの仮想ボタンは"low"と"high"の下位のプロパティを通して指定することができるので、一般のボタンのプロパティのどれでも受け入れることができます。~ たとえば、あなたがちょうど表示方向をコントロールしたいならば、あなたは/sim/view/axes/long と /sim/view/axes/latのために、2本の軸を割り当てる事ができます。 <axis n="5"> <binding> <command>property-adjust/command> <property>/sim/view/axes/lat</property> <step>2.0</step> </binding> </axis> <axis n="6"> <binding> <command>property-adjust</command> <property>/sim/view/axes/long</property> <step>2.0</step> </binding> </axis> もしくは --prop:/input/joysticks/js/axis[5]/binding/command=property-scale --prop:/input/joysticks/js/axis[5]/binding/property=/sim/view/axes/lat --prop:/input/joysticks/js/axis[5]/binding/step=2.0 --prop:/input/joysticks/js/axis[6]/binding/command=property-scale --prop:/input/joysticks/js/axis[6]/binding/property=/sim/view/axes/long --prop:/input/joysticks/js/axis[5]/binding/step=2.0 (訳注:この記述、特にプロパティ名は古いです。) 他にも、垂直/水平に2Dパネルをスクロールするために、ボタンとしてHATスイッチを使用したいなら、あなたは<high>と<low>を使用できます。 下記の例は、<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> --prop:/input/joysticks/js/axis[1]/low/repeatable=true --prop:/input/joysticks/js/axis[1]/low/binding/command=property-adjust --prop:/input/joysticks/js/axis[1]/low/binding/property=/controls/flight/elevator-trim --prop:/input/joysticks/js/axis[1]/low/binding/step=0.001 --prop:/input/joysticks/js/axis[1]/high/repeatable=true --prop:/input/joysticks/js/axis[1]/high/binding/command=property-adjust --prop:/input/joysticks/js/axis[1]/high/binding/property=/controls/flight/elevator-trim --prop:/input/joysticks/js/axis[1]/high/binding/step=-0.001 下のコマンドラインオプションで、リピート間隔を設定できます。リピート間隔を0.05秒にした場合、1秒間に20回繰り返されます。それには、下のオプションを追加してください。 --prop:/input/joysticks/js/axis[1]/interval-sec=0.05 あなたは、いくつかの軸をブレーキに割り当てる事ができます。そのためには、0.0(ブレーキ無し)と1.0の間の位置を使うことができます(フルブレーキ) *キーボードの設定 [#k1d54a0b] キーボードのキーバインディングは、以下の例のようにジョイスティックのボタンのバインディングとほとんど同じです(コンテキストは/input/keyboardです): <key n="1"> <name>Ctrl-A</name> <desc>Toggle autopilot altitude lock.</desc> <binding> <command>property-toggle</command> <property>/autopilot/locks/altitude</property> </binding> </key> あなたはまず、いくつかの事に気が付くでしょう。 最初に、インデックス(<key n="'''m'''">)で、あなたがバインディングする主要なコードを指定します。この例では、'''1'''は<name>で指定しているように、Ctrl+Aに相当します。~ 一般的にキーコードは255まであり、256より上はファンクションキー(F'''n''')や矢印キー等の特別なキーを意味します。~ 下記に、同じ働きのコマンドラインオプションを書きます。 --prop:/input/keyboard/key[1]/binding/command=property-toggle --prop:/input/keyboard/key[1]/binding/property=/autopilot/locks/altitude ('propaty-toggle'コマンドは、trueとfalseの切り替えを行います。従って、プロパティ値以外の物は要りません。)インデックスを省略しないでください!!! 2つ目は、キーの方がジョイスティックのボタンよりも多くの修飾が出来ます。"mod-up"(キーを離した時に作動)に加えて、キーの場合は"mod-alt", "mod-ctrl", "mod-shift" を使う事ができます。~ 下に例を示します。 <key n="49"> <name>1</name> <mod-shift> <desc>Look back left</desc> <binding> <command>property-assign</command> <property>/sim/view/goal-offset</property> <value type="double">135</value> </binding> </mod-shift> </key> この例では、'1'キーとShiftキーを同時に押した場合に、左後ろを見るように視界を切り替えます。~ 注意:これはテンキーの1でしか動きません。テンキーで無く'q'キーの上にある'1'の場合、(当然ながら)'!'のキーコードを送ります~ FightGearの使っているinputモジュールは、controlとshiftの同時押しを自動で取得するよう試みます。 --メモ: 32より小さいキーコードはコントロールキャラクタを暗に含むので、以前はctrl-Aのバインディングに入れ子の"mod-ctrl"要素を使う必要はありませんでした。(翻訳自信なし) また、新しい入力モジュールは、キーボードのkey-upイベントを検出できるので、タッチに敏感なブレーキ等もジョイスティックと同じように記述できます。 <key n="44"> <name>,</name> <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> </key> 今度は、別の方法でブレーキの設定のバインディングをします。この例では、<mod-up>タグが無いので、パーキングブレーキのように働きます。 <key n="66"> <name>B</name> <desc>Toggle parking brake on or off</desc> <binding> <command>property-toggle</command> <property>/controls/gear/brake-parking</property> </binding> </key> *nasalスクリプトの使い方 [#rfd4c248] 注意:この項はsambarが勝手に追加したものです。 FlightGearには、Nasal というスクリプト言語が実装されていて、ジョイスティックやキーボードの設定ファイルに組み込んだり、あるいは設定ファイルから呼び出したりしてスクリプトを実行する事ができます。~ ここでは、Nasalスクリプトそのものの詳しい説明は省略し、既にあるスクリプトの呼び出し方の解説に留めます。~ Nasalについての詳しい説明は[[Nasal マニュアル]]を参照してください。 これは、ボタン5にギアダウンを割り当てる時の設定です。(Input/Joysticks/CH/pro-yoke-usb.xmlより) <button n="5"> <desc>Gear down</desc> <repeatable>false</repeatable> <binding> <command>nasal</command> <!--ここで、nasalを使用しますよ〜、と宣言 --> <script>controls.gearDown(1)</script> <!-- <script>と、</script>の間に実行したいスクリプトを書いてください。 </binding> <mod-up> <binding> <command>nasal</command> <script>controls.gearDown(0)</script> </binding> </mod-up> </button> これは、$FGROOT/nasal/controls.nas内のgearDown関数に、ボタンを押した時に1、ボタンを離したら0を引数として与えて実行しています。 var gearDown = func(v) { if (v < 0) { setprop("/controls/gear/gear-down", 0); } elsif (v > 0) { setprop("/controls/gear/gear-down", 1); } } この関数では、与えた引数が正なら車輪を下げ、負なら車輪を上げます。なお、ゼロなら何もせず現状を維持します。 つまり、この例では"property-assign"を使って、同じ動作をさせるバインディングは以下のようにも書けます。 <button n="5> <desc>Gear down</desc> <repeatable>false</repeatable> <binding> <command>property-assign</command> <property>/controls/gear/gear-down</property> <value>1<value> </binding> </button> なお、「どちらのアプローチで書くのが良いか」については残念ながら「やりたい事次第」としかお答えできませんが、例えば「エレベータにGリミッターを付け加えたい」場合など、やや複雑な処理をしたい場合には後者のアプローチの方が良いでしょう。 ----- 翻訳開始 2009/03/22 sambar~ 仮翻訳終了。 2009/03/24 sambar~ 「[Help]>[Joystick Information]の情報からジョイスティックの情報を集める」を追加 2009/03/25 sambar~ 「nasalの使用方法」を追加 2009/03/26 sambar~ リンク忘れ修正 2009/03/28 sambar~ 表現の修正 2009/03/29 ~
テキスト整形のルールを表示する