FineKernelToolKit 2.9.0

- メインページ
- ネームスペース
- クラス
- ファイル

- 構成
- クラス階層
- 構成メンバ

全て クラス ネームスペース ファイル 関数 変数 型定義 列挙型 列挙型の値 フレンド マクロ定義 ページ
Public メソッド | すべてのメンバ一覧
クラス fk_Input

ゲームパッド・ジョイスティック系デバイス制御クラス [詳細]

fk_Inputに対する継承グラフ
[凡例]
fk_Inputのコラボレーション図
[凡例]

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

注意
  本クラスは、Windows プラットフォームでしか利用できません。 また、利用の際には事前に DirectX SDK をインストールする必要があります。 さらに、本クラスを用いて作成した実行ファイルを実行するには、 開発時で用いたものと同一バージョンの DirectX がインストールされている必要があります。

## コンストラクタとデストラクタ

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)」と入力して下さい。

戻り値
  初期化に成功した場合 S_OK を、失敗した場合はそれ以外の値が返ります。

HRESULT fk_Input::uninit | ( | void |  | ) |

完了処理関数

デバイスの完了処理を行います。デストラクタで自動的に呼ばれるので、 通常はユーザが直接利用することはありません。

戻り値
  完了処理に成功すれば S_OK を、失敗すれば別の値を返します。

HRESULT fk_Input::update | ( | void |  | ) |

更新処理

現在のデバイス情報を更新します。 通常は描画処理毎に呼ぶことを想定しています。

戻り値
  取得に成功すれば S_OK を、失敗すれば別の値を返します。

DWORD fk_Input::getJoyCount | ( | void |  | ) |

デバイス個数取得関数

init() した時点で認識したデバイスの個数を取得します。 init() されてから抜き差しがあっても関知できません。

戻り値
  認識した個数を返します。

fk_InputInfo* fk_Input::getJoyStick | ( | DWORD | index | ) |

デバイス情報取得関数

デバイスの現在の入力状況を取得します。 得られる情報は以下の通りです。

- 各ボタンの押下状況。
- 左スティックの方向。
- 各アナログスティックの座標値。
- ハットスイッチ(POV)の数値。

詳細は fk_InputInfo を参照して下さい。 この関数は、(getInputStatus() と違い)返値がポインタであることに注意して下さい。

引数

  [in] | index | デバイスのID。1個目が「0」となります。

戻り値
  デバイス状況が格納された fk_InputInfo 型のポインタ。 引数で無効なデバイス番号が指定された場合は NULL を返します。

覚え書き
  setButtonSwap() や setAxisToButton() によってボタンや軸を入れ替えていた場合、 入れ替えを反映した情報を取得します。しかし、 setKeyAssign(), setAxisAssign(), setPOVAssign() といったキーボードの代替操作については、本関数においては反映されません。 キーボードと処理を一本化したい場合は getInputStatus() を使用して下さい。

参照
  fk_InputInfo, getInputStatus()

fk_InputInfo fk_Input::getInputStatus | ( | int | index = `0` | ) |

キーボード考慮デバイス情報取得関数

デバイスの現在の入力状況を取得します。 得られる情報は以下の通りです。

- 各ボタンの押下状況。
- 左スティックの方向。
- 各アナログスティックの座標値。
- ハットスイッチ(POV)の数値。

詳細は fk_InputInfo を参照して下さい。 この関数は、(getJoyStick() と違い)返値がポインタではないことに注意して下さい。

本関数は getJoyStick() とは異なり、 setKeyAssign(), setAxisAssign(), setPOVAssign() によるキーボード代替設定が有効となります。 引数に 0 を入力し、さらにデバイスが接続されていなかった場合、 キーボードによる代替操作の状況を取得します。 デバイスが接続されている場合はデバイスの状況を取得します。

引数

  [in] | index | デバイスのID。 0 を指定し、かつデバイスが接続されてない場合は、 キーボードの代替操作状況を取得します。

戻り値
  現在のデバイス状況。

覚え書き
  setButtonSwap() や setAxisToButton() によってボタンや軸を入れ替えていた場合、 入れ替えを反映した情報を取得します。 また、デバイスが接続されていない場合で、 キーボードの代替操作を無視したい場合は getJoyStick() を利用して下さい。

参照
  fk_InputInfo, getJoyStick()

void fk_Input::setBorder | ( | int | index,
|  | int | borderX,
|  | int | borderY
| ) |  |

アナログデバイス調整関数

スティック閾値設定関数1

この関数は、左スティックを十字キーの代わりに用いる場合に、 どの程度倒したらその方向への入力と見なすかを設定するものです。 値の範囲は最小値が 0、最大値が 1000 で、初期値は 500 となっています。

引数

  [in] | index | デバイスのID。
  [in] | borderX | 横方向の閾値。
  [in] | borderY | 縦方向の閾値。

参照
  fk_InputInfo, setMinMax(int, int, int)

void fk_Input::setBorder | ( | int | borderX,
|  | int | borderY
| ) |  |

スティック閾値設定関数2

この関数は、左アナログスティックを十字キーの代わりに用いる場合に、 どの程度倒したらその方向への入力と見なすかを設定するものです。 値の範囲は最小値が 0、最大値が 1000 で、初期値は 500 となっています。 本関数は ID が 0 であるデバイスの閾値を設定しますが、 任意のデバイスの閾値を設定したい場合は setBorder(int, int, int) を用いて下さい。

引数

  [in] | borderX | 横方向の閾値。
  [in] | borderY | 縦方向の閾値。

参照
  fk_InputInfo, setMinMax(int, int)

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 を入力して下さい。

参照
  fk_InputInfo, setBorder(int, int, int)

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 を入力して下さい。

参照
  fk_InputInfo, setBorder(int, int)

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 | デバイス上の軸方向。

覚え書き
  仮想空間上の軸とデバイス上の軸の対応は、 初期状態は以下の通りです。
  - FK_AXIS1_X : FK_AXIS_X_POS
  - FK_AXIS1_Y : FK_AXIS_Y_POS
  - FK_AXIS2_X : FK_AXIS_Z_POS
  - FK_AXIS2_Y : FK_AXIS_RZ_POS
  - FK_AXIS3_X : FK_AXIS_RX_POS
  - FK_AXIS3_Y : FK_AXIS_RY_POS

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 | ボタンを押したと判断する閾値。

参照
  setAxisSwap(), setButtonSwap(), clearAxisToButton(), fk_InputInfo, fk_AxisDirection

void fk_Input::clearAxisToButton | ( | int | dev | ) |

軸ボタン割り当て解除関数

setAxisToButton() 関数によって割り当てた設定を解除します。

引数

  [in] | dev | デバイスID。

参照
  setAxisToButton()

void fk_Input::setKeyAssign | ( | int | id,
|  | DWORD | keycode
| ) |  |

ボタン機能キーボード代替設定関数

デバイス上のボタンの代替としてキーボード上のキーを設定します。 キーコードの指定は、dinput.h 内で定義されている 「DIK_」で始まる定数を使って行います。 この関数によるキーボード代替操作は、デバイスIDが 0 のものに対してのみ有効です。

引数

  [in] | id | デバイス上のボタン番号。この番号とは、 setButtonSwap() で設定した「入れ替えた後の番号」を指します。
  [in] | keycode | 代替するキーに対応するキーコード。

覚え書き
  本関数による代替設定は、 getInputStatus() での結果には反映されますが、 getJoyStick() には反映されません。

参照
  setAxisAssign(), setPOVAssign()

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 | 右方向に対応するキーコード。

覚え書き
  本関数による代替設定は、 getInputStatus() での結果には反映されますが、 getJoyStick() には反映されません。

参照
  setKeyAssign(), setPOVAssign()

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 | 右下方向に対応するキーコード。

覚え書き
  本関数による代替設定は、 getInputStatus() での結果には反映されますが、 getJoyStick() には反映されません。

参照
  setKeyAssign(), setAxisAssign()