Questo è facile.
Non farlo (in proiettile :: muove ()):
xVel=0;
yVel=0;
E il proiettile continuerà a muoversi.
Un altro problema è qui:
if(keystates[SDLK_SPACE])
{
yVel-=14;
}
Fondamentalmente, non dovresti farlo -=
. Sostituirlo con yVel = -14
(Tutti i proiettili si muoveranno sempre con la velocità delle costanti) o rilevano il momento "Down" (cioè il tasto non è stato premuto nel frame precedente, ed è premuto in corrente), e solo allora lo fai -= 14
. Questo genere di cose (rilevare un evento keyup/keydown) potrebbe essere più semplice se elabori eventi chiave che ricevi (nel tuo ciclo principale) invece di chiamare SDL_GetKeyState
.