トップページ > ゲ製作技術 > 2011年03月26日 > pvmCllah

書き込み順位&時間帯一覧

1 位/97 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000110030201100009



使用した名前一覧書き込んだスレッド一覧
◆UUwiUCL1P6
C++でRPGゲームを作成する

書き込みレス一覧

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はいったん完了するとほとんどいじらなくなります。
ライブラリィ化してもいいかも知れません。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。