SDL C++游戏编程帮助(简单)
我正在研究一个太空射手,我不知道如何在我释放空格键后让子弹继续发射到屏幕的末端。到目前为止,如果我按下空格键,它就会射出,当我释放它时,子弹会停留在它们离开的地方。这里是我的类,它们在主目录中按顺序调用SDL C++游戏编程帮助(简单),c++,sdl,game-development,C++,Sdl,Game Development,我正在研究一个太空射手,我不知道如何在我释放空格键后让子弹继续发射到屏幕的末端。到目前为止,如果我按下空格键,它就会射出,当我释放它时,子弹会停留在它们离开的地方。这里是我的类,它们在主目录中按顺序调用 class Projectile : public Character { private: float xVel; float yVel; float x; float y; public: void init(); void keys();
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;
}
在移动方法中,更改x和y坐标,然后将速度设置回0。这就是你的子弹停止移动的原因。当你按下空格键时,你不断地从Y速度中减去14。您不希望将速度重置为0 那很容易
不要在投射::移动中执行此操作:
xVel=0;
yVel=0;
子弹会继续移动
另一个问题是:
if(keystates[SDLK_SPACE])
{
yVel-=14;
}
基本上,你不应该做-=。将其替换为yVel=-14,所有子弹将始终以恒定速度移动,或检测按键下降时刻,即在前一帧中未按下按键,而在当前帧中按下按键,然后才执行-=14。如果您在主循环中处理接收到的关键事件而不是调用SDL_GetKeyState,则这种检测keyup/keydown事件的方法可能更简单。确实适用于_surfacex-5、y-2、jizz、screen;在屏幕表面涂上jizz?是的。。。这是一个奇异类型的太空射手,我的“子弹”是jizz。。。。
if(keystates[SDLK_SPACE])
{
yVel-=14;
}