Eso es fácil.
No hagas esto (en proyectile :: Move ()):
xVel=0;
yVel=0;
Y la bala seguirá moviéndose.
Otro problema está aquí:
if(keystates[SDLK_SPACE])
{
yVel-=14;
}
Básicamente, no deberías hacer -=
. O reemplazarlo con yVel = -14
(Todas las balas siempre se moverán con la velocidad de las constantes) o detectarán el momento de "llave abajo" (es decir, la tecla no se ha presionado en el cuadro anterior, y se presiona en la actual), y solo entonces lo hace -= 14
. Este tipo de cosas (detectar un evento clave/llave) puede ser más simple si procesa los eventos clave que recibe (en su bucle principal) en lugar de llamar SDL_GetKeyState
.