A jak pobierasz stan klawisza? Podaj ten kawałek z funkcji okna.
Edit:
Nie czekając na odpowiedź spróuję ci wyjaśnić. Jeżeli w swoim kodzie masz coś takiego:
case WM_KEYDOWN:
switch (wParam)
{
case JAKIS_TAM_KLAWISZ:
Strzelaj();
break;
};
break;
To program wygonuje te instrukcje jeżeli klawisz jest wciśnięty - a że twoja ręka nie jest taka szybka, to przeleci parę loopów. Jeżeli chcesz, żeby strzał był oddawany tylko raz przy kliknięciu klawisza, zamień kod na:
case WM_KEYUP:
switch (wParam)
{
case JAKIS_TAM_KLAWISZ:
Strzelaj();
break;
};
break;
W tym wypadku instrukcje wykonają się tylko wtedy, gdy klawisz zostanie puszczony (zmieni stan z wciśniętego), czyli wykona się dokładnie jeden raz przy jednym naciśnięciu (i zwolnieniu) klawisza.
Edit2:
Padło formatowanie, muszę je wywalić... ; /
Edit3:
Mniemam, iż chodzi ci o to, że przy jednym naciśnięciu klawisza wylatuje jeden pocisk. W przeciwnym wypadku - poczytaj o GetTickCount() lub innym pobieraczu czasu.