int GetHitKeyStateAll_2(int KeyStateBuf[/url]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key==1) KeyStateBuf++;
else KeyStateBuf=0;
}
return 0;
}
この一文をただメイン関数の前に書けばもうそれでどれくらい入力されているか判定できるようになり、
if( Key[KEY_INPUT_DOWN]==1 ||( Key[KEY_INPUT_DOWN]%5==0 && Key[KEY_INPUT_DOWN]>30)){
// たった今押したか、30カウンター以上押しっぱなしかつ5回に一度
のようなことはできるようになるのでしょうか?
keyの入力の判定
Re:keyの入力の判定
キーリピートを実装したいということですね。 こんなのはどうでしょう。 int count = 0; // グローバル if (キーが押されている時) { if (count == 0 || count == 30) { // 処理 } if (++count >= 35) { count = 30; } } else { count = 0; }
Re:keyの入力の判定
あー、質問文をちゃんと見てませんでした。
一言で言うと、「やってみればいかがですか?」に限ります。
試すことができるのに、試さないで質問するのは愚の骨頂ですよ。
まず試してみる。
それで、うまくいかなければ考える。
それでもわからなければ、質問するようにしましょう。
一言で言うと、「やってみればいかがですか?」に限ります。
試すことができるのに、試さないで質問するのは愚の骨頂ですよ。
まず試してみる。
それで、うまくいかなければ考える。
それでもわからなければ、質問するようにしましょう。
Re:keyの入力の判定
「どれくらい」という表現がちょっと曖昧でよくわかりませんが、
int型がカウント出来る数には限界があるので、どれ位の時間その限界以内で使用できるかということでしょうか?
unsigned int はだいたい40億までカウント出来ます。
一方、60FPSでゲームを作ったとすると、
1秒で 60
1分で 60*60
1時間で60*60*60
1日で 60*60*60*24
1年で 60*60*60*24*365
ですね。
40億÷1年のカウント数
で計算してみます。
2.11.....
です。つまり2年以上キーを押しっぱなしにすると0に戻ります。
しかしまずそういうことは無いですよね。
常識的にありえなさそうなことまできちんと制御しないといけない本格的なゲームには適さないかもしれませんが、
とりあえずこれでも問題無いかと思っています。
もしそれでも気持ち悪いということならLONGLONG型を使うというのもありかもしれません。
2000京、20エクサ回カウント出来るのでこれがオーバーフローするころには地球は滅亡してるでしょう。
(キロ、メガ、ギガ、テラ、ペタ、エクサ)
int型がカウント出来る数には限界があるので、どれ位の時間その限界以内で使用できるかということでしょうか?
unsigned int はだいたい40億までカウント出来ます。
一方、60FPSでゲームを作ったとすると、
1秒で 60
1分で 60*60
1時間で60*60*60
1日で 60*60*60*24
1年で 60*60*60*24*365
ですね。
40億÷1年のカウント数
で計算してみます。
2.11.....
です。つまり2年以上キーを押しっぱなしにすると0に戻ります。
しかしまずそういうことは無いですよね。
常識的にありえなさそうなことまできちんと制御しないといけない本格的なゲームには適さないかもしれませんが、
とりあえずこれでも問題無いかと思っています。
もしそれでも気持ち悪いということならLONGLONG型を使うというのもありかもしれません。
2000京、20エクサ回カウント出来るのでこれがオーバーフローするころには地球は滅亡してるでしょう。
(キロ、メガ、ギガ、テラ、ペタ、エクサ)
Re:keyの入力の判定
質問の仕方が悪かったみたいです。
あの一番上の長い文があると一体どうなっているのかが、説明を見てもよくわからなかったので、
少しわかりやすく説明をしてもらえるとありがたいです。
あの一番上の長い文があると一体どうなっているのかが、説明を見てもよくわからなかったので、
少しわかりやすく説明をしてもらえるとありがたいです。
Re:keyの入力の判定
渡されたKeyStateBufには現在のキー入力状態が入ります。 int GetHitKeyStateAll_2(int KeyStateBuf[/url]){ char GetHitKeyStateAll_Key[256]; GetHitKeyStateAll( GetHitKeyStateAll_Key ); for(int i=0;i<256;i++){ if(GetHitKeyStateAll_Key==1) KeyStateBuf++; else KeyStateBuf=0; } return 0; } キーボードは一つしかないでしょうから、この関数内で静的変数で用意してもいいんですが、一応引数にしてます。 とりあえずGetHitKeyStateAll_Keyには今の瞬間のキーの入力状態がはいりますよね。 今の入力状態がオンならそのキー入力状態カウンタをカウントアップします。 オフなら0にします。 そうすることで、キーがどれ位おされているかカウント出来るようになっているのです。 例えば60FPSのゲームでエンターを2秒おしっぱなしにしたら 引数[ KEY_INPUT_RETURN ] には120が入っています。 特定のキーの入力状態を表示するプログラムを作り、実際にキーを押してみたらよく解ると思います。