Domanda

Sto lavorando a uno sparatutto spaziale e non riesco a capire come far continuare i proiettili a sparare alla fine dello schermo dopo aver rilasciato la barra spaziale. A partire da ora, se premo la barra spaziale spara, quando la rilascio, il proiettile rimane dove si scatenano. Ecco le mie lezioni che vengono chiamate in ordine in 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;
}
È stato utile?

Soluzione

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.

Altri suggerimenti

xVel=0;
yVel=0;

Nel tuo metodo di spostamento, si modificano le coordinate X e Y e quindi ripare le velocità su 0. Ecco perché il proiettile smette di muoversi. Mentre stai premendo lo spazio, sottrai costantemente 14 dalla velocità y. Non vuoi ripristinare le velocità su 0.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top