常にゼロを返すという仕様にしていたのですが、この5フレームという基準が難しいので
押されたときだけ反応し、押しっぱなしを無効にする方法を試しています
そこで、10個バッファを用意して毎フレームバッファに現在の入力状態を代入していき
押した1フレームだけを有効にし、押しっぱなしの2フレーム以降はゼロにするように
しているソースを書いていますが、思ったとおりに動いてくれません
押しっぱなしは、前回のフレームの入力された状態と比べています
とこかが、うまいぐあいに間違っているのですが、どこだかわかりません
どこがおかしいか、一緒に考えてくれないでしょうか?
使用ライブラリはDxLibです
関数 GetHitKeyStateAll_ は毎フレーム必ず呼び出されます
void GetHitKeyStateAll_( char *key )
{
static char key_buff[10][256];
static int index = 1;
memset( key, 0, sizeof(key) );
GetHitKeyStateAll( key );
int i;
for( i=0; i<256; i++ )
key_buff[index][i] = key[i];
bool eq = true;
bool boost = false;
if( index == 0 )
boost = true;
for( i=0; i<256; i++ )
{
// index-1 が -1のときは index=9を参照
if( boost )
{
if( key_buff[9][i] != key[i] )
{
eq = false;
break;
}
}
else
{
if( key_buff[index-1][i] != key[i] )
{
eq = false;
break;
}
}
}
// もし前回と同じ入力だったらすべて0にする
if( eq == true )
memset( key, 0, sizeof(key) );
index++;
if( index >= 10 )
index = 0;
}