ゲームパッド・ジョイスティック系デバイス制御クラス [詳細]
Public メソッド | |
fk_Input (void) | |
コンストラクタ [詳細] | |
~fk_Input (void) | |
デストラクタ [詳細] | |
基本処理関数 | |
HRESULT | init (HINSTANCE hinst, HWND hwnd) |
初期化関数 [詳細] | |
HRESULT | uninit (void) |
完了処理関数 [詳細] | |
HRESULT | update (void) |
更新処理 [詳細] | |
情報取得関数 | |
DWORD | getJoyCount (void) |
デバイス個数取得関数 [詳細] | |
fk_InputInfo * | getJoyStick (DWORD index) |
デバイス情報取得関数 [詳細] | |
fk_InputInfo | getInputStatus (int index=0) |
キーボード考慮デバイス情報取得関数 [詳細] | |
void | setBorder (int index, int borderX, int borderY) |
アナログデバイス調整関数 [詳細] | |
void | setBorder (int borderX, int borderY) |
スティック閾値設定関数2 [詳細] | |
void | setMinMax (int index, int min, int max) |
スティッククリッピング設定関数1 [詳細] | |
void | setMinMax (int min, int max) |
スティッククリッピング設定関数2 [詳細] | |
ボタン・軸入れ替え関数 | |
void | setButtonSwap (int dev, int id, int raw) |
ボタン入れ替え設定関数 [詳細] | |
void | setAxisSwap (int dev, fk_AxisDirection id, fk_RawAxis raw) |
軸入れ替え設定関数 [詳細] | |
void | setAxisToButton (int dev, fk_AxisDirection axisID, int posBtn, int negBtn, int border) |
軸ボタン割り当て設定関数 [詳細] | |
void | clearAxisToButton (int dev) |
軸ボタン割り当て解除関数 [詳細] | |
キーボード代替関数 | |
void | setKeyAssign (int id, DWORD keycode) |
ボタン機能キーボード代替設定関数 [詳細] | |
void | setAxisAssign (int axis_id, DWORD up, DWORD dn, DWORD lt, DWORD rt) |
スティック機能キーボード代替設定関数 [詳細] | |
void | setPOVAssign (DWORD ul, DWORD u, DWORD ur, DWORD l, DWORD r, DWORD dl, DWORD d, DWORD dr) |
ハットスイッチ(POVボタン)機能キーボード代替設定関数 [詳細] | |
ゲームパッド・ジョイスティック系デバイス制御クラス
このクラスは、ゲームコントローラーやジョイスティックなどの、 ゲーム専用デバイスを制御するためのクラスです。 単にデバイスの状況を取得するだけでなく、 デバイス中のボタンやスティックなどをキーボードで代替するための機能も備えています。 なお、本クラスは標準ヘッダには追加されていないため、 利用の際にはプログラムの先頭部分で、 以下のように FK.h を include した後に Input.h も include します。
#include <FK/FK.h> #include <FK/Input.h>
以降、本クラスの説明ではゲーム専用デバイスを単に「デバイス」と呼称します。
fk_Input::fk_Input | ( | void | ) |
コンストラクタ
fk_Input::~fk_Input | ( | void | ) |
デストラクタ
HRESULT fk_Input::init | ( | HINSTANCE | hinst, |
HWND | hwnd | ||
) |
初期化関数
デバイス処理の初期化を行います。 最初に必ず1回呼ぶ必要があります。 その際、 Fl_Window (またはその派生クラス)のインスタンスにおいて、 Fl_Window::show() を呼んだ後に呼ぶ必要があります。
[in] | hinst | ここは「fl_display」と入力して下さい。 |
[in] | hwnd | ここは、Fl_Window (またはその派生クラス)のインスタンスの変数名を win としたとき、 「fl_xid(&win)」と入力して下さい。 |
HRESULT fk_Input::uninit | ( | void | ) |
完了処理関数
デバイスの完了処理を行います。デストラクタで自動的に呼ばれるので、 通常はユーザが直接利用することはありません。
HRESULT fk_Input::update | ( | void | ) |
更新処理
現在のデバイス情報を更新します。 通常は描画処理毎に呼ぶことを想定しています。
DWORD fk_Input::getJoyCount | ( | void | ) |
fk_InputInfo* fk_Input::getJoyStick | ( | DWORD | index | ) |
デバイス情報取得関数
デバイスの現在の入力状況を取得します。 得られる情報は以下の通りです。
詳細は fk_InputInfo を参照して下さい。 この関数は、(getInputStatus() と違い)返値がポインタであることに注意して下さい。
[in] | index | デバイスのID。1個目が「0」となります。 |
fk_InputInfo fk_Input::getInputStatus | ( | int | index = 0 | ) |
キーボード考慮デバイス情報取得関数
デバイスの現在の入力状況を取得します。 得られる情報は以下の通りです。
詳細は fk_InputInfo を参照して下さい。 この関数は、(getJoyStick() と違い)返値がポインタではないことに注意して下さい。
本関数は getJoyStick() とは異なり、 setKeyAssign(), setAxisAssign(), setPOVAssign() によるキーボード代替設定が有効となります。 引数に 0 を入力し、さらにデバイスが接続されていなかった場合、 キーボードによる代替操作の状況を取得します。 デバイスが接続されている場合はデバイスの状況を取得します。
[in] | index | デバイスのID。 0 を指定し、かつデバイスが接続されてない場合は、 キーボードの代替操作状況を取得します。 |
void fk_Input::setBorder | ( | int | index, |
int | borderX, | ||
int | borderY | ||
) |
アナログデバイス調整関数
スティック閾値設定関数1
この関数は、左スティックを十字キーの代わりに用いる場合に、 どの程度倒したらその方向への入力と見なすかを設定するものです。 値の範囲は最小値が 0、最大値が 1000 で、初期値は 500 となっています。
[in] | index | デバイスのID。 |
[in] | borderX | 横方向の閾値。 |
[in] | borderY | 縦方向の閾値。 |
void fk_Input::setBorder | ( | int | borderX, |
int | borderY | ||
) |
スティック閾値設定関数2
この関数は、左アナログスティックを十字キーの代わりに用いる場合に、 どの程度倒したらその方向への入力と見なすかを設定するものです。 値の範囲は最小値が 0、最大値が 1000 で、初期値は 500 となっています。 本関数は ID が 0 であるデバイスの閾値を設定しますが、 任意のデバイスの閾値を設定したい場合は setBorder(int, int, int) を用いて下さい。
[in] | borderX | 横方向の閾値。 |
[in] | borderY | 縦方向の閾値。 |
void fk_Input::setMinMax | ( | int | index, |
int | min, | ||
int | max | ||
) |
スティッククリッピング設定関数1
この関数は、アナログスティックの値がある一定以上であれば最大値とみなし、 ある一定未満である場合は 0 とみなすように設定するものです。
アナログスティックを用いた場合、その座標の最大絶対値は 1000 であり、 ニュートラルの状態は 0 となるのが理想です。 しかしながら、実際には最もスティックを倒した状態でも 1000 にならない場合や、 ニュートラルの状態が微妙に (0, 0) からずれることがしばしばあります。 本関数は、そのような場合を考慮し、ある一定の絶対値以上であれば 1000 とみなし、 ある一定の絶対値未満であれば 0 とみなす設定を行います。 初期値は最小値が 200、最大値が 900 となっています。
[in] | index | デバイス ID。 |
[in] | min | 0 とみなす閾値。負の数が与えられた場合は本関数の命令を無視します。 最小値方向のみなし設定を無効としたい場合、0 を入力して下さい。 |
[in] | max | 1000(理論最大値)とみなす閾値。 1000 を超える値が与えられた場合は本関数の命令を無視します。 最大値方向のみなし設定を無効としたい場合、1000 を入力して下さい。 |
void fk_Input::setMinMax | ( | int | min, |
int | max | ||
) |
スティッククリッピング設定関数2
この関数は、アナログスティックの値がある一定以上であれば最大値とみなし、 ある一定未満である場合は 0 とみなすように設定するものです。
アナログスティックを用いた場合、その座標の最大絶対値は 1000 であり、 ニュートラルの状態は 0 となるのが理想です。 しかしながら、実際には最もスティックを倒した状態でも 1000 にならない場合や、 ニュートラルの状態が微妙に (0, 0) からずれることがしばしばあります。 本関数は、そのような場合を考慮し、ある一定の絶対値以上であれば 1000 とみなし、 ある一定の絶対値未満であれば 0 とみなす設定を行います。 初期値は最小値が 200、最大値が 900 となっています。 本関数は ID が 0 であるデバイスの閾値を設定しますが、 任意のデバイスの閾値を設定したい場合は setMinMax(int, int, int) を用いて下さい。
[in] | min | 0 とみなす閾値。負の数が与えられた場合は本関数の命令を無視します。 最小値方向のみなし設定を無効としたい場合、0 を入力して下さい。 |
[in] | max | 1000(理論最大値)とみなす閾値。 1000 を超える値が与えられた場合は本関数の命令を無視します。 最大値方向のみなし設定を無効としたい場合、1000 を入力して下さい。 |
void fk_Input::setButtonSwap | ( | int | dev, |
int | id, | ||
int | raw | ||
) |
ボタン入れ替え設定関数
デバイスのボタン番号を入れ替えます。 この関数でボタンの入れ替えを設定した場合、 その後の getJoyStick() や getInputStatus() で取得する情報は、 入れ替えた状態を反映したものとなります。 なお、ボタンIDは 0 から開始となります。
[in] | dev | デバイスID。 |
[in] | id | 新たに割り振るボタンID。 |
[in] | raw | デバイスでの本来のボタンID。 |
void fk_Input::setAxisSwap | ( | int | dev, |
fk_AxisDirection | id, | ||
fk_RawAxis | raw | ||
) |
軸入れ替え設定関数
この関数は、デバイス上のスティックの軸方向と、 仮想空間内の軸方向の対応を設定するものです。 以下のコードは、左スティックの横方向(x 軸方向)を、 fk_InputInfo::x[1] の値に対応させるためのものです。
fk_Input input; input.setAxisSwap(0, FK_AXIS2_X, FK_AXIS_X_POS);
[in] | dev | デバイスのID。 |
[in] | id | 仮想空間内の軸方向。 |
[in] | raw | デバイス上の軸方向。 |
void fk_Input::setAxisToButton | ( | int | dev, |
fk_AxisDirection | axisID, | ||
int | posBtn, | ||
int | negBtn, | ||
int | border | ||
) |
軸ボタン割り当て設定関数
デバイス上のスティック軸方向をボタンとして扱うよう設定します。 実質的には XBox360 コントローラ向けの機能となります。 以下は ID0 に接続された XBox360 コントローラを、 PS系コントローラ互換の割り当てに変更するコード例です。 デフォルトでは FK_AXIS2_X が LT, RT に対応しますが、 右スティックを軸2にアサインする設定も含めて例示します。
// 軸2と3を入れ替え setAxisSwap(0, FK_AXIS2_X, FK_AXIS_RX_POS); setAxisSwap(0, FK_AXIS2_Y, FK_AXIS_RY_POS); setAxisSwap(0, FK_AXIS3_X, FK_AXIS_Z_POS); setAxisSwap(0, FK_AXIS3_Y, FK_AXIS_RZ_POS); // 入れ替え後の軸3の X 方向を 6,7 番に割り当て setAxisToButton(0, FK_AXIS3_X, 6, 7, 500); // ボタン入れ替え setButtonSwap(0, 8, 6); // Back->Select setButtonSwap(0, 9, 7); // Start->Start setButtonSwap(0, 10, 8); // StickL->StickL setButtonSwap(0, 11, 9); // StickR->StickR
[in] | dev | デバイス ID。 |
[in] | axisID | 仮想空間内の軸方向。 |
[in] | posBtn | + 方向のボタン番号。 |
[in] | negBtn | - 方向のボタン番号。 |
[in] | border | ボタンを押したと判断する閾値。 |
void fk_Input::clearAxisToButton | ( | int | dev | ) |
void fk_Input::setKeyAssign | ( | int | id, |
DWORD | keycode | ||
) |
ボタン機能キーボード代替設定関数
デバイス上のボタンの代替としてキーボード上のキーを設定します。 キーコードの指定は、dinput.h 内で定義されている 「DIK_」で始まる定数を使って行います。 この関数によるキーボード代替操作は、デバイスIDが 0 のものに対してのみ有効です。
[in] | id | デバイス上のボタン番号。この番号とは、 setButtonSwap() で設定した「入れ替えた後の番号」を指します。 |
[in] | keycode | 代替するキーに対応するキーコード。 |
void fk_Input::setAxisAssign | ( | int | axis_id, |
DWORD | up, | ||
DWORD | dn, | ||
DWORD | lt, | ||
DWORD | rt | ||
) |
スティック機能キーボード代替設定関数
デバイス上のスティックの代わりに使用するキーを設定します。 キーコードの指定は、dinput.h 内で定義されている 「DIK_」で始まる定数を使って行います。 この関数によるキーボード代替操作は、デバイスIDが 0 のものに対してのみ有効です。
[in] | axis_id | 0で左スティック(通常十字キーとして使われる方)を、 1で右スティックを、 2で3番目の軸を表します。 |
[in] | up | 上方向に対応するキーコード。 |
[in] | dn | 下方向に対応するキーコード。 |
[in] | lt | 左方向に対応するキーコード。 |
[in] | rt | 右方向に対応するキーコード。 |
void fk_Input::setPOVAssign | ( | DWORD | ul, |
DWORD | u, | ||
DWORD | ur, | ||
DWORD | l, | ||
DWORD | r, | ||
DWORD | dl, | ||
DWORD | d, | ||
DWORD | dr | ||
) |
ハットスイッチ(POVボタン)機能キーボード代替設定関数
デバイス上のハットスイッチ(POVボタン)の代替としてキーボード上のキーを設定します。 キーコードの指定は、dinput.h 内で定義されている 「DIK_」で始まる定数を使って行います。 この関数によるキーボード代替操作は、デバイスIDが 0 のものに対してのみ有効です。
[in] | ul | 左上方向に対応するキーコード。 |
[in] | u | 上方向に対応するキーコード。 |
[in] | ur | 右上方向に対応するキーコード。 |
[in] | l | 左方向に対応するキーコード。 |
[in] | r | 右上方向に対応するキーコード。 |
[in] | dl | 左下上方向に対応するキーコード。 |
[in] | d | 下方向に対応するキーコード。 |
[in] | dr | 右下方向に対応するキーコード。 |