Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SDL C++游戏编程帮助(简单)_C++_Sdl_Game Development - Fatal编程技术网

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;             
}