Isso é fácil.
Não faça isso (no projétil :: move ()):
xVel=0;
yVel=0;
E a bala continuará se movendo.
Outro problema está aqui:
if(keystates[SDLK_SPACE])
{
yVel-=14;
}
Basicamente, você não deveria fazer -=
. Substitua -o por yVel = -14
(Todas as balas sempre se moverão com a velocidade de constantes) ou detectará o momento "chave para baixo" (ou seja, a tecla não foi pressionada no quadro anterior e é pressionado no atual), e só então faz -= 14
. Esse tipo de coisa (detectando um evento KeyUp/Keydown) pode ser mais simples se você processar os principais eventos que você recebe (em seu loop principal) em vez de ligar SDL_GetKeyState
.