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_InputInfogetJoyStick (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]min0 とみなす閾値。負の数が与えられた場合は本関数の命令を無視します。 最小値方向のみなし設定を無効としたい場合、0 を入力して下さい。
[in]max1000(理論最大値)とみなす閾値。 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]min0 とみなす閾値。負の数が与えられた場合は本関数の命令を無視します。 最小値方向のみなし設定を無効としたい場合、0 を入力して下さい。
[in]max1000(理論最大値)とみなす閾値。 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_id0で左スティック(通常十字キーとして使われる方)を、 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()