上記サイトを参考に、キーの入力フレームを取得するクラスを作成しました。
class Keyboard{
static const int num=256;//有効なキーの総数
unsigned int press[num],release[num];//フレーム数を格納する変数
bool checkValid(int keycode){return(0<=keycode && keycode<num);}//有効なキーかチェック
public:
Keyboard();
void update();
int on(int keycode);//対応するキーの押されているフレーム数を取得
int off(int keycode);//対応するキーの離されているフレーム数を取得
};
Keyboard::Keyboard(){
memset(press,0,sizeof(press));
memset(release,0,sizeof(release));
}
int Keyboard::on(int keycode){
return Keyboard::checkValid(keyCode)? press[keyCode]:-1;
}
int Keyboard::off(int keycode){
return Keyboard::checkValid(keycode)? release[keycode]:-1;
}
void Keyboard::update(){
char tmp[num];
GetHitKeyStateAll(tmp);
for(int i=0;i<num;i++){
if(tmp[i]){
if(release[i]>0)release[i]=0;
press[i]++;
}else{
if(press[i]>0)press[i]=0;
release[i]++;
}
}
}
いまいちやり方が思いつきません。
私としては、Keyboard::onやoffに与える引数を変える方法は取りたくないので、
デフォルトのキーをそのまま引数に出来るよう、
Keyboard::onやoffのメンバ関数自体を改良していきたいと思っています。
前置きが長くなりましたが、
Keyboard::on(KEY_INPUT_RIGHT)の返却値を"KEY_INPUT_LEFT"のフレーム数に対応させるような方法を教えて下さい。
また出来れば、皆さんがどのような方法を採用しているかも知りたいです。
回答よろしくお願いします。