NKC_DInput.cppファイルの組み込み

DirectInputが簡単に利用できるように、必要な処理を関数化したソースファイルを用意した。このソースファイルを既存のプロジェクトに組み込み、利用する。

NKC_DInput.cppおよびNKC_DInput.h

前準備

上記リンクからファイルをダウンロードし、解凍すると、「NKC_DInput.cpp」「NKC_DInput.h」の2つのファイルが現れる。これらを、組み込みたいプロジェクトのフォルダに配置する。

なお、このプログラムは、共通ヘッダ・ファイル(Common.h)が存在するプロジェクトに組み込むことを前提として作成しているので、ソース分割を行っていない場合は7章を見ながらソース分割をしておくこと。

プロジェクトの設定を変更

DirectInputを使えるようにプロジェクトの設定を変更する。

  1. 「プロジェクト」→「設定」を選択
  2. 「リンク」タブをクリックし、「オブジェクト/ライブラリ モジュール」の先頭にdinput8.libライブラリを追加
  3. 追加したら「OK」ボタンをクリック

プロジェクトへ追加

プロジェクトのフォルダに配置した2つのファイル(NKC_DInput.cpp、NKC_DInput.h)を自分のプロジェクトにインポートする。

  1. 「プロジェクト」→「プロジェクトへ追加」→「ファイル」を選択
  2. 「NKC_DInput.cpp」「NKC_DInput.h」を選択して「追加」ボタンをクリック

Common.hの修正

共通ヘッダ・ファイル「Common.h」にdinput.hNKC_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(キーボードの状態を取得する)