MSSDKのDirectDraw関係のサンプルにはddutil.cppという、DirectDrawの汎用関数(?)を まとめたプログラムがあるが、何故かDirectInput関係のサンプルには無いので、diutil.cpp という名前で 作ってみました。
ジョイスティックが刺さっているときにはジョイスティックからのみ状態を取得し、
刺さっていないときにはキーボードから状態を取得するバージョンと、ジョイスティックが
刺さっているときはジョイスティックとキーボードの両方から状態を取得し、刺さっていない
場合はキーボードから状態を取得するバージョンを作成しました。
とはいえ、これはDirectInputの初期化のところでif文をチョコット変えるだけなので誰でも
できると思います。
前者のバージョンのソースをdiutil1.lzh、
後者のソースをdiutil2.lzhとして圧縮してありますので、
興味のある人は一度覗いてみてください。
このプログラムは、ジョイパッドを使ったゲームを作るために作成したものです。
ですからキーボードの状態を取得するといってもすべてのキーの状態を取得するものではなく、
ジョイパッドのボタンの変わりに指定したキーの状態だけを取得します。
キーの対応は次のようにしました。
| パッド | キーボード | プログラム内 |
|---|---|---|
| A | A | BUTTON_A |
| B | B | BUTTON_B |
| C | C | BUTTON_C |
| X | X | BUTTON_X |
| Y | Y | BUTTON_Y |
| Z | Z | BUTTON_Z |
| L | L | BUTTON_L |
| R | R | BUTTON_R |
| START | ENTER | BUTTON_START |
| M | M | BUTTON_M |
| LEFT | LEFT | BUTTON_LEFT |
| RIGHT | RIGHT | BUTTON_RIGHT |
| UP | UP | BUTTON_UP |
| DOWN | DOWN | BUTTON_DOWN |
どちらの圧縮ファイルも解凍するとdiutil.hと
diutil.cppというファイルが出てきます。
使い方は 次のとおりです。
#include "diutil.h"
/* DirectInputオブジェクトの初期化 */
if ( InitDInput( hThisInst, hWnd ) != true ) return FALSE;
DWORD dwInput;
dwInput = GetInputDeviceState();
if ( dwInput & BUTTON_UP ) {
// 押されているときの処理
} else {
// 押されていないときの処理
}
/* DirectInputオブジェクトの開放 */
ReleaseDInput();
こんな感じなんですけど・・・説明って難しい。もしどなたかこれを試したら、 結果を教えて頂けないでしょうか?もっと判りやすくしたいので。