Вопрос

Я работаю над космическим стрелком, и я не могу понять, как сделать пули продолжать стрелять до конца экрана после того, как я выпущу космическую панель. На данный момент, если я нажимаю на пробел, он стреляет, когда я ее выпускаю, пуля остается там, где они уходят. Вот мои занятия, которые называются в порядке в 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;
}
Это было полезно?

Решение

Это просто.

Не делайте этого (в снаряде :: move ()):

xVel=0;
yVel=0;

И пуля будет продолжать двигаться.

Еще одна проблема здесь:

if(keystates[SDLK_SPACE])
{             
    yVel-=14;             
}

В основном вы не должны делать -=. Анкет Либо замените его на yVel = -14 (Все пули всегда будут перемещаться со скоростью постоянной скорости) или обнаруживают момент «вниз» (IE Клавиша не нажимала в предыдущем кадре и нажимается в текущем), и только тогда -= 14. Анкет Такие вещи (обнаружение события Keyup/Keydown) может быть проще, если вы обрабатываете события ключей, которые вы получаете (в вашем основном цикле) вместо того, чтобы вызовать SDL_GetKeyState.

Другие советы

xVel=0;
yVel=0;

В своем методе движения вы меняете координаты X и Y, а затем устанавливаете скорости на 0. Вот почему ваша пуля перестает двигаться. В то время как вы нажимаете на пространство, вы постоянно вычитаете 14 из y-скорости. Вы не хотите сбросить скорости до 0.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top