-1

我正在开发一款太空射击游戏,但在我释放空格键后,我无法弄清楚如何让子弹继续射击到屏幕的尽头。到目前为止,如果我按下它发射的空格键,当我释放它时,子弹就会停留在它们离开的地方。这是我在 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;
}
4

2 回答 2

2

这很容易。

不要这样做(在 Projectile::move() 中):

xVel=0;
yVel=0;

子弹会继续移动。

另一个问题在这里:

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

基本上,你不应该这样做-=。将其替换为yVel = -14(所有子弹将始终以恒定速度移动)或检测“按键按下”时刻(即在前一帧中未按下键,并且在当前帧中按下),然后才执行-= 14. 如果您处理收到的键事件(在主循环中)而不是调用SDL_GetKeyState.

于 2013-11-07T17:45:10.130 回答
0
xVel=0;
yVel=0;

在您的移动方法中,您更改 x 和 y 坐标,然后将速度设置回 0。这就是您的子弹停止移动的原因。当您按 Space 时,您会不断地从 Y 速度中减去 14。您不想将速度重置为 0。

于 2013-11-07T17:44:17.920 回答