我正在处理一个太空射击游戏,在释放太空杆后,我无法弄清楚如何使子弹继续向屏幕末端发射。截至目前,如果我按下它的空间键,当我释放它时,子弹就会留在他们的位置。这是我的课程,在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;
}
有帮助吗?

解决方案

这很容易。

不要这样做(在弹丸:: move()中):

xVel=0;
yVel=0;

子弹将继续前进。

另一个问题是:

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

基本上,你不应该这样做 -=. 。要么用 yVel = -14 (所有子弹都将始终以常数速度移动)或检测“钥匙向下”时刻(即键在上一个帧中尚未按下,并且在当前的框架中被按下),然后才能执行 -= 14. 。如果您处理收到的密钥事件(在主循环中)而不是调用,则这种事情(检测键/键盘事件)可能会更简单 SDL_GetKeyState.

其他提示

xVel=0;
yVel=0;

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top