DXライブラリで複数キーの同時入力について
Posted: 2011年9月28日(水) 01:58
シューティングゲームのひな型プログラムを作成していたのですが、
GetHitKeyStateAll()関数で3キー同時押しを認識する場合と、しない場合があったので質問させて下さい。
具体的には、↑→キー入力中(右上移動中)zキー(ショット)などは反応するのですが、
←↑キー入力中(左上移動中)zキー(ショット)などは3ボタン目を認識してくれません。
ジョイパッドは問題なく3ボタン同時押しを認識します。
下記の入力クラスから、ゲームのメインループ中、update()メソッドで毎フレーム入力を感知し、
KEY_INPUT_LEFT などの定数で指定したKey[]の値によってプレイヤーキャラを操作しています。
同じような経験のある方、回答よろしくお願いします。
// 入力クラス ---------------------------------------------------------------------------------- //
class Input
{
private:
int Key[256];
public:
Input( void ) { for( int i=0; i<256; i++ ) { Key = 0; } };
void update( void );
int getKey( int a ) { if ( a >= 0 && 255 >= a ) { return Key[a]; } else return 0; };
};
void Input::update( void )
{
int padInput = GetJoypadInputState( DX_INPUT_PAD1 );
char keyBuff[256];
GetHitKeyStateAll( keyBuff );
if ( ( padInput & PAD_INPUT_LEFT ) || keyBuff[KEY_INPUT_LEFT] ) { Key[KEY_INPUT_LEFT] ++; }
else { Key[KEY_INPUT_LEFT] = 0; }
if ( ( padInput & PAD_INPUT_UP ) || keyBuff[KEY_INPUT_UP] ) { Key[KEY_INPUT_UP] ++; }
else { Key[KEY_INPUT_UP] = 0; }
if ( ( padInput & PAD_INPUT_RIGHT ) || keyBuff[KEY_INPUT_RIGHT] ) { Key[KEY_INPUT_RIGHT] ++; }
else { Key[KEY_INPUT_RIGHT] = 0; }
if ( ( padInput & PAD_INPUT_DOWN ) || keyBuff[KEY_INPUT_DOWN] ) { Key[KEY_INPUT_DOWN] ++; }
else { Key[KEY_INPUT_DOWN] = 0; }
if ( ( padInput & PAD_INPUT_A ) || keyBuff[KEY_INPUT_Z] ) { Key[KEY_INPUT_Z] ++; }
else { Key[KEY_INPUT_Z] = 0; }
};
GetHitKeyStateAll()関数で3キー同時押しを認識する場合と、しない場合があったので質問させて下さい。
具体的には、↑→キー入力中(右上移動中)zキー(ショット)などは反応するのですが、
←↑キー入力中(左上移動中)zキー(ショット)などは3ボタン目を認識してくれません。
ジョイパッドは問題なく3ボタン同時押しを認識します。
下記の入力クラスから、ゲームのメインループ中、update()メソッドで毎フレーム入力を感知し、
KEY_INPUT_LEFT などの定数で指定したKey[]の値によってプレイヤーキャラを操作しています。
同じような経験のある方、回答よろしくお願いします。
// 入力クラス ---------------------------------------------------------------------------------- //
class Input
{
private:
int Key[256];
public:
Input( void ) { for( int i=0; i<256; i++ ) { Key = 0; } };
void update( void );
int getKey( int a ) { if ( a >= 0 && 255 >= a ) { return Key[a]; } else return 0; };
};
void Input::update( void )
{
int padInput = GetJoypadInputState( DX_INPUT_PAD1 );
char keyBuff[256];
GetHitKeyStateAll( keyBuff );
if ( ( padInput & PAD_INPUT_LEFT ) || keyBuff[KEY_INPUT_LEFT] ) { Key[KEY_INPUT_LEFT] ++; }
else { Key[KEY_INPUT_LEFT] = 0; }
if ( ( padInput & PAD_INPUT_UP ) || keyBuff[KEY_INPUT_UP] ) { Key[KEY_INPUT_UP] ++; }
else { Key[KEY_INPUT_UP] = 0; }
if ( ( padInput & PAD_INPUT_RIGHT ) || keyBuff[KEY_INPUT_RIGHT] ) { Key[KEY_INPUT_RIGHT] ++; }
else { Key[KEY_INPUT_RIGHT] = 0; }
if ( ( padInput & PAD_INPUT_DOWN ) || keyBuff[KEY_INPUT_DOWN] ) { Key[KEY_INPUT_DOWN] ++; }
else { Key[KEY_INPUT_DOWN] = 0; }
if ( ( padInput & PAD_INPUT_A ) || keyBuff[KEY_INPUT_Z] ) { Key[KEY_INPUT_Z] ++; }
else { Key[KEY_INPUT_Z] = 0; }
};