Справка по программированию игр на SDL C ++ (простая)

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

-1

Решение

Это легко.

Не делайте этого (в Projectile :: move ()):

xVel=0;
yVel=0;

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

Другая проблема здесь:

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

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

2

Другие решения

xVel=0;
yVel=0;

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

0

По вопросам рекламы [email protected]