今、キーボード入力で、押しっぱなしはそのまま数値を+1していって増やし
キーボード入力がなかったら ゼロにもどす という方法で押しっぱなしを防ごうかと考えています
そこで、下のソースを作ったのですが、妙な動作をするのでどこかにおかしいところがないかみてもらいたいです
void CSub::KeybordInput() 関数は毎フレーム呼び出されます
起動すると、最初の状態は zeo を表示し、F10を押すと zero が表示されず 2回目のF10を押すと zero が表示されます
何回か試したところ 奇数回数のF10は zero が表示されず、偶数では zero が表示されます
どこか、おかしいところはないでしょうか?よろしくおねがいします。
//==================================================================
// グローバル変数
EXTN int g_Key[1024];
...
...
...
void CSub::KeybordInput()
{
char key[1024];
memset( key, 0, sizeof(key) );
GetHitKeyStateAll( key );
// キーボード -> ジョイスティク
if( key[ KEY_INPUT_UP ] == 1 )
g_Joystick1[ PAD_INPUT_UP ]++;
if( key[ KEY_INPUT_DOWN ] == 1 )
g_Joystick1[ PAD_INPUT_DOWN ]++;
if( key[ KEY_INPUT_LEFT ] == 1 )
g_Joystick1[ PAD_INPUT_LEFT ]++;
if( key[ KEY_INPUT_RIGHT ] == 1 )
g_Joystick1[ PAD_INPUT_RIGHT ]++;
if( key[ KEY_INPUT_A ] )
g_Joystick1[ PAD_INPUT_A ]++;
if( key[ KEY_INPUT_B ] )
g_Joystick1[ PAD_INPUT_B ]++;
if( key[ KEY_INPUT_C ] )
g_Joystick1[ PAD_INPUT_C ]++;
if( key[ KEY_INPUT_X ] )
g_Joystick1[ PAD_INPUT_X ]++;
if( key[ KEY_INPUT_Y ] )
g_Joystick1[ PAD_INPUT_Y ]++;
if( key[ KEY_INPUT_Z ] )
g_Joystick1[ PAD_INPUT_Z ]++;
// キーボードの入力
int i;
int push = 0;
for( i=0; i<1024; i++ )
{
if( key[i] )
{
// 入力があった
push = 1;
}
}
// 入力があった
if( push == 1 )
{
if( key[KEY_INPUT_F10] )
g_Key[KEY_INPUT_F10]++;
}
// 入力がなかった
if( push == 0 )
{
memset( g_Key, 0, sizeof(g_Key) );
DrawString( 120, 120, "zero", GetColor(255,255,0) );
}
}