【问题标题】:SDL C++ game programming help (simple)SDL C++ 游戏编程帮助(简单)
【发布时间】:2013-11-07 17:38:11
【问题描述】:

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

【问题讨论】:

  • apply_surface(x-5,y-2,jizz,screen); 是否在屏幕表面应用 jizz?
  • 是的......它是一个异国情调的太空射击游戏,我的“子弹”是 jizz......

标签: c++ sdl game-development


【解决方案1】:

这很容易。

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

xVel=0;
yVel=0;

子弹会继续移动。

这里还有一个问题:

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

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

【讨论】:

    【解决方案2】:
    xVel=0;
    yVel=0;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多