Pergunta

Estou trabalhando em um atirador espacial e não consigo descobrir como fazer as balas continuarem atirando até o final da tela depois de lançar a barra de espaço. A partir de agora, se eu pressionar a barra de espaço, ela atira, quando a liberto, a bala fica onde eles se afastam. Aqui estão minhas aulas que são chamadas em ordem em Main ().

class Projectile : public Character
{
private:
    float xVel;
    float yVel;
    float x;
    float y;

public:
    void init();
    void keys();
    void move();
    void show();

}bullet;

void Projectile::init()
{
    x=315;
    y=305;
    xVel=0;
    yVel=0;
}

void Projectile::keys()
{
    bool shoot = true;
    Uint8 *keystates = SDL_GetKeyState( NULL );
    if(keystates[SDLK_SPACE])
    {             
        yVel-=14;             
    }
}

void Projectile::move()
{
    x=x+xVel;
    y=y+yVel;
    xVel=0;
    yVel=0;
    if(y<0)
    {
        x=charx;
        y=chary;              
    }
}

void Projectile::show()
{
    apply_surface(x-5,y-2,jizz,screen);
    cout << y << endl;
}
Foi útil?

Solução

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.

Outras dicas

xVel=0;
yVel=0;

No seu método de movimentação, você altera as coordenadas X e Y e depois define as velocidades para 0. É por isso que sua bala para de se mover. Enquanto você está pressionando o espaço, está constantemente subtraindo 14 da velocidade Y. Você não quer redefinir as velocidades para 0.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top