DirectInputが簡単に利用できるように、必要な処理を関数化したソースファイルを用意した。このソースファイルを既存のプロジェクトに組み込み、利用する。
上記リンクからファイルをダウンロードし、解凍すると、「NKC_DInput.cpp」「NKC_DInput.h」の2つのファイルが現れる。これらを、組み込みたいプロジェクトのフォルダに配置する。
なお、このプログラムは、共通ヘッダ・ファイル(Common.h)が存在するプロジェクトに組み込むことを前提として作成しているので、ソース分割を行っていない場合は7章を見ながらソース分割をしておくこと。
DirectInputを使えるようにプロジェクトの設定を変更する。
プロジェクトのフォルダに配置した2つのファイル(NKC_DInput.cpp、NKC_DInput.h)を自分のプロジェクトにインポートする。
共通ヘッダ・ファイル「Common.h」にdinput.h、NKC_DInput.hをインクルードする。
//----------------------------------------------------------------------------- // 共通ヘッダ・ファイル // Copyright NKC Game Staff(←自分の名前) //----------------------------------------------------------------------------- #include <stdio.h> #include <windows.h> // WindowsAPIを使用可能にする #include <windowsx.h> #include <d3d8.h> // DirectX8ヘッダファイル #include <d3dx8.h> // D3DXヘッダファイル #include <dinput.h> // DirectInputを使用可能にする ・ ・ ・ // 自作ヘッダ・ファイルの組み込み #include "public.h" #include "NKC_DGraphics.h" #include "NKC_DInput.h" #include "start.h" #include "game.h" #include "enemy.h" ・ ・ ・
ソースファイルの組み込みが終わったら、DirectInputの初期化と開放処理を追加する。WinMain.cppのWinMain関数を次のように修正する。
//-------------------------------------------------------------------------------------------------
// メイン関数(エントリーポイント)プログラムはここから始まる
//-------------------------------------------------------------------------------------------------
int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpszArgs, int nWinMode)
{
MSG msg; // メッセージ構造体変数
//表示するウィンドウの定義、登録、表示
if ( !InitApp(hThisInst, nWinMode) ) // InitApp関数を呼び出し、
return (FALSE); // 正常に終了すれば次にメッセージループへ
// DirectX8の初期化
if ( FAILED(InitDX8()) ) return (FALSE);
// DirectInputオブジェクトの初期化
if ( FAILED(InitDInput(hThisInst)) ) return (FALSE);
// ゲームループ
while ( TRUE ) {
// メッセージがあるかどうか
if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) {
// メッセージを取得し、WM_QUITかどうか
if (!GetMessage(&msg, NULL, 0, 0)) break;
TranslateMessage(&msg); //キーボード利用を可能にする
DispatchMessage(&msg); //制御をWindowsに戻す
} else {
// ゲームメイン処理
UpdateFrame();
Sleep(1);
}
}
// DirectInputオブジェクトの開放
ReleaseDInput();
// DirectX8オブジェクトの削除
ReleaseD3D();
return msg.wParam;
}
以上の修正を行ったらビルドを実行し、エラーが出ないことを確認する。
| BACK(DirectInputについて) | NEXT(キーボードの状態を取得する) |