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

move メソッドでは、x 座標と y 座標を変更してから、速度を 0 に戻します。これが、弾丸の動きが止まる理由です。Space を押している間、Y-Velocity から常に 14 を引いています。速度を 0 にリセットしたくありません。

于 2013-11-07T17:44:17.920 に答える