我正在拍摄太空射击游戏,在发布空格键后,我无法弄清楚如何让子弹继续发射到屏幕的末端。截至目前,如果我按空格键进行拍摄,当我释放它时,子弹会停留在它们的位置。以下是我在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;
}
答案 0 :(得分:2)
这很容易。
不要这样做(在Projectile :: move()中):
xVel=0;
yVel=0;
子弹将继续移动。
另一个问题是:
if(keystates[SDLK_SPACE])
{
yVel-=14;
}
基本上,你不应该-=
。用yVel = -14
替换它(所有子弹总是以常数速度移动)或检测“按键”时刻(即在前一帧中没有按下按键,在当前帧中按下按键),然后才执行-= 14
。如果您处理收到的关键事件(在主循环中)而不是调用SDL_GetKeyState
,这种事情(检测到keyup / keydown事件)可能会更简单。
答案 1 :(得分:0)
xVel=0;
yVel=0;
在移动方法中,您可以更改x和y坐标,然后将速度设置回0.这就是您的子弹停止移动的原因。当你按空间时,你会不断从Y-Velocity中减去14。您不希望将速度重置为0.