Classiclll's Blog

an old boy

翻訳中

ずいぶん更新間隔があいたので、中間報告をかねて、

このライブラリを使って、P5のライブラリーが出来ればHappy! (なんだけど...)
class WiiRemote       - by Cha0s in a Forum of Wiili.org.

 Wiiリモコンそのもののクラス。Wiiリモコンの全ての機能を操作できるメソッドを装備している。addWiiRemoteListenerでWiiRemoteListenerを登録できる。

 データ入力レポート(チャンネルのようなもの)について:ボタン、加速度計、IRセンサーおよび拡張ポートからの入力に使われる11の入力レポートがある。これらのデバイス(加速度計、IRセンサー、拡張ポート)毎に、多様な動作モードでさまざまなデータを扱う必要がある。残念なことに、Wii Remoteはこれら三つのデバイスが持つほとんどの(多重のデータが発生する)モードはサポートできない。それゆえ、ある装置で測定データを失ってしまう可能性のあるモードをイネーブルにしようとしても、そのモードをイネーブルにできないようになっている。そのようなモードをイネーブルにするためには、まず、損失を被る可能性のある(既にイネーブルになっている)モードをディセーブルにしなければならない。(たとえばIRがFullモードのとき)インターリーブされたデータをイネーブルにするには、setInterleaved(true)を呼び出す必要がある。;これは「IRのFullモードがうまくは働かなく」なることを意味する。しかし、ボタン情報をとり損ねることなくその他のレポート(ボタン以外)をイネーブルにすることができる。;ただし、他のレポートは依然としてディセーブルになっている必要がある。利用可能なレポートの詳細については、静的変数である、I_BUTTONS、I_ACCELEROMETER、等の解説を参照のこと。(全て0x30=十進48以上の値)

様々なsetEnabledメソッドに関して:既にイネーブルなものをイネーブルにしても構わない。プログラムは通常イネーブル情報などを送出するが、それによって他に悪影響を及ぼさなように気をつけること。イネーブルできるすべての設定項目は、デフォルト値にリセットされてしまう場合があることに注意のこと。

拡張デバイスに関して:WRExtensionFactoryを使って拡張デバイス(ヌンチャクやクラッシックコントローラー等)を追加できる。拡張デバイスがつながれたとき、WiiRemoteは拡張コード(拡張装置から取得可)に符合するWRExtension オブジェクトを返すようにWRExtensionFactoryに要求する。そのとき返されるヌルでないWRExtension(のオブジェクト)は、アクティブな拡張デバイスである。WRExtensionsはペイロード情報を解析して、その拡張デバイスのイベントを得るメソッドを提供する。 WRExtensionFactory.registerExtension() メソッドをつかって、factoryにWRExtensionsを加えることがでる。拡張デバイスの接続状態とイネーブル状態の違いに注意すること:「接続状態」は、拡張デバイスの物理的な状態をあらわす。(物理的にWii Remoteに接続され、入力準備ができているかどうか):「イネーブル状態」はプログラムから見た拡張デバイスの状態をあらわす。(WRExtensionEventsはlisteners に渡されており、拡張装置をサポートする入力レポートを処理することができるかどうか)

インターリーブデータモードにすべし。イネーブルにされると、自動的にIR(赤外線センサー)はFullモードにアップグレードされる。可能なら、加速度計もインターリーブモードに変えるべし。(このようにすると)イベントはI_INTERLEAVED_ACCELEROMETER_IR2へのレポートとしてだけ発生し、両方のチャンネルからのデータはこの時にあわせて全てのデータが送られる。IR(赤外線センサー)がイネーブルな時にディスェーブルにされると、IRモードはダウングレードされるかディスェーブルされなければならない。IRモードをダウングレードすることによって、自動的にインターリーブもディスェーブルされる。IRがイネーブルな場合、原則としてこのメソッドを直接呼ぶのではなく、IRモードのダウングレードを通して行うべし。

Wiiリモコンから、指定されたアドレスのデータを読み込む。一度にひとつのデータが読み込まれる。二つのデータを同時に読もうとしても、最初のデータが読み込まれるまで第二のデータの読み込みは待たされる。Wiiリモコンも、拡張デバイスが接続されたか否かの情報などを別々のタイミングで読みとっている。つまり、このメソッド呼出しについては即時の保証がない。そのうえ、他のリクエストがあると、要求された読込みが完了しないこともある。読込みの結果を保証することができる唯一の方法は、isReadingData()とwaitForDataReadCompletion()を用いて、全てのデータが読まれるまで待つことである。

全てのボタンキーマッピング(デバイスボタン → キーボードキー)が格納されているVectorを返す。このVectorを用いてボタンマッピングを割り当てることが出来る。ヌルが返されたら、ボタンマッピングはサポートされていないことを意味する。ボタンマップは順に解析される。複数のキーは1つのデバイスボタンにマップされるかもしれない、あるいは、複数のデバイスボタンが1つのキーにマップされるかもしれない。ボタンキーマップVectorに格納されているマッピングの全てがその順序で解析される。なので、たとえばあなたがAボタンをキーボードのhキーにマップした上に、Aボタンをキーボードのiキーにマップしていたら、Aボタンを押すことによって(hを先にマップしていたから)「hi」が生成される。

全てのボタンマウスマッピング(デバイスボタン → マウスボタン)が格納されているVectorを返す。このVectorを用いて、ボタンマッピングを割り当てることができる。ヌルが返されたら、ボタンマッピングはサポートされていないことを意味する。ボタンマップは順に解析される。複数のマウスボタンは1つのデバイスボタンにマップされるかもしれない。あるいは、複数のデバイスボタンが1つのマウスボタンにマップされるかもしれない。ボタンキーマップVectorに格納されているマッピングの全てがその順序で解析される。



Processing については、
日本語サポートサイトからたどれるP5インフォメーション→言語が参考になる。
(解説してあるのは一昔前の版だから注意が必要だけど、loop()→draw()の読み替えだけで大抵OK)
・山本徹(thoru)さんがFunProce55ingで解説してくれている。(【簡潔】で【わかり易く】、【楽しい】解説)
例題集は習作集と区別するためにこちらに置いている。
・P5のスケッチからアプレットを作り、【ジオシティーズ】にアップする手順をまとめたので、参考に。