- C++でRPGゲームを作成する
837 : ◆UUwiUCL1P6 [sage]:2011/03/26(土) 10:36:17.74 ID:pvmCllah - 必要な変数(静的メンバ)を設定します。
.h public: enum { JOY1,JOY2,JOYMAX,}; private: static IDirectInput8* input; static IDirectInputDevice8* keyboard; static IDirectInputDevice8* mouse; static IDirectInputDevice8* joypad[]; static unsigned int joycnt; .cpp namespace { IDirectInput8* GameInput::input; IDirectInputDevice8* GameInput::keyboard; IDirectInputDevice8* GameInput::mouse; IDirectInputDevice8* GameInput::joypad[JOYMAX]; unsigned int GameInput::joycnt; }
|
- C++でRPGゲームを作成する
838 : ◆UUwiUCL1P6 [sage]:2011/03/26(土) 11:18:46.58 ID:pvmCllah - DirectInputの初期化です。
GameInput::Init input = NULL; DirectInput8Create( GetModuleHandle( NULL ), DIRECTINPUT_VERSION, IID_IDirectInput8, reinterpret_cast< void** >( &input ), NULL ); GameInput::Free if ( input ) { input->Release(); input = NULL; } >>837 .hに#include <dinput.h>が必要でした。
|
- C++でRPGゲームを作成する
841 : ◆UUwiUCL1P6 [sage]:2011/03/26(土) 14:20:22.37 ID:pvmCllah - >>840
では、namespace{}での括りは外してしまってください。
|
- C++でRPGゲームを作成する
842 : ◆UUwiUCL1P6 [sage]:2011/03/26(土) 14:22:30.73 ID:pvmCllah - keyboardの初期化です。
GameInput::Init input->CreateDevice( GUID_SysKeyboard, &keyboard, NULL ); keyboard->SetDataFormat( &c_dfDIKeyboard ); keyboard->SetCooperativeLevel( Window.Handle(), DISCL_FOREGROUND|DISCL_NONEXCLUSIVE ); { DIPROPDWORD dipd = {}; dipd.diph.dwSize = sizeof( DIPROPDWORD ); dipd.diph.dwHeaderSize = sizeof( DIPROPHEADER ); dipd.diph.dwObj = 0; dipd.diph.dwHow = DIPH_DEVICE; dipd.dwData = 8; keyboard->SetProperty( DIPROP_BUFFERSIZE, &dipd.diph ); } keyboard->Acquire(); GameInput::Free if ( keyboard ) { keyboard->Unacquire(); keyboard = NULL; }
|
- C++でRPGゲームを作成する
844 : ◆UUwiUCL1P6 [sage]:2011/03/26(土) 14:40:47.38 ID:pvmCllah - WINDOWクラスに下記の関数を作成してください。
public: const HWND Handle( void ) const { return handle; } >>842 GameInput::Init keyboard = NULL // ねんのため追加してください input->CreateDevice( GUID_SysKeyboard, ... GameInput::Free: 解放の順番は初期化と反対にしてください。 input初期化->keyboard初期化 〜 keyboard解放→input解放
|
- C++でRPGゲームを作成する
848 : ◆UUwiUCL1P6 [sage]:2011/03/26(土) 16:40:45.61 ID:pvmCllah - >>845
下記を宣言してください。 extern WINDOW window; この先いろんなところで参照するので、ヘッダに記載した方がよいです。 (>>846)のような意見も出ていますし、ソースを断片的に記載していくのは効率や誤謬が出やすいので、 別の手段を検討したほうがよいかも知れません。 ブログかアップローダを指定いただければそちらでお渡ししますんで、 ご検討ください。
|
- C++でRPGゲームを作成する
849 : ◆UUwiUCL1P6 [sage]:2011/03/26(土) 16:53:57.96 ID:pvmCllah - extern WINDOW Window; でした(最初大文字)
ソース全体でこれだけはグローバル変数にしています。 他の変数はクラスの静的メンバでprivateにしています(IDirectInput8* input等)。 ここに書いてやり取りするのは楽でいいんですけど先々難しそうですね。 スレッドのリサイクル法が適用されて日記帳扱いになればOKかも。
|
- C++でRPGゲームを作成する
851 : ◆UUwiUCL1P6 [sage]:2011/03/26(土) 18:14:33.03 ID:pvmCllah - >>850
gmdevにDirectInputの.h/.cppを置きました。 ttp://gmdev.xrea.jp/st/up/245.txt >common.hみたいなヘッダ そうです。自分専用のマクロとか定義とかの置き場にヘッダ作りますよね。 そこに入れておいてください。 ついでに↓もお願いします。 #define ARRAY(a) (sizeof(a)/sizeof(a[0])) 配列の要素数のマクロです。 置いたソースですが現在の自分のソースからいろいろはしょって整形しているので、 部分的に文法がおかしくなったりで、エラーがでるかも知れません。 それはすいませんがうまく直してください。
|
- C++でRPGゲームを作成する
854 : ◆UUwiUCL1P6 [sage]:2011/03/26(土) 19:15:55.16 ID:pvmCllah - >>852
index は static です。付け忘れました。 >>853 DATA_MAXです。記述ミス。 入力ワーク回りで間違い多いのは、現在その部分は環状リストで可変長で実装しているので、 急ごしらえで変更したためです。 一部、ヘッダにあって実装されていない関数(JoyPush等)は実際にゲーム中で使用する関数です。 これはGameInput.cppとは別ファイルにした方がよいです。 GameInput.cppはいったん完了するとほとんどいじらなくなります。 ライブラリィ化してもいいかも知れません。
|