SDL C ++游戏编程帮助(简单)

时间:2013-11-07 17:38:11

标签: c++ sdl game-development

我正在拍摄太空射击游戏,在发布空格键后,我无法弄清楚如何让子弹继续发射到屏幕的末端。截至目前,如果我按空格键进行拍摄,当我释放它时,子弹会停留在它们的位置。以下是我在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;
}

2 个答案:

答案 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.