2

XNA ゲーム スタジオ 4.0 を使用して 2D ゲームを開発しています。「ヒーロー」スプライトで四角形のショット スプライトを発射する必要があります。

左のコントロールを押してシュートすると、自分のプレーヤーからシュートが始まります。ここまでは問題ありませんが、問題は停止しないことです。位置が に移動することはありませんtheVoid

撮影用の私のコードは次のとおりです。

protected override void Update(GameTime gameTime)
{
    if (Keyboard.GetState().IsKeyDown(Keys.LeftControl) && isShotted == false)
    {
        isShotted = true;
        shotPosition = playerPosition;            
    }
    if (isShotted == true && (shotPosition.X <= shotPosition.X+150) )
    {
        shotPosition.X += shotSpeed.X * (float)gameTime.ElapsedGameTime.TotalSeconds;
    }
    else 
    { 
        isShotted = false;
        shotPosition = theVoid;
    }
}

明確化:

  • playerPosition私の「ヒーロー」スプライトの位置です。
  • theVoidVector2 (700,700)、セットshotPosition = theVoidするとショットが消えます。
4

1 に答える 1

4

shotPosition.x更新ごとに更新しているため、ショットが消えることはありません。あなたはチェックしています:

if (isShotted == true && (shotPosition.X <= shotPosition.X+150) )

そして、その中でifインクリメントしますshotPosition.X

shotPosition.X += shotSpeed.X * (float)gameTime.ElapsedGameTime.TotalSeconds;

shotPosition.Xこれを修正する 1 つのオプションは、@jonhopkins のコメントに従って、プレーヤーの位置を確認することです。ただし、プレーヤーがショットとほぼ同じ速度で移動できる場合、プレーヤーはそれに従うだけで、ショットが消えることはありません。これは、必要な場合とそうでない場合があります。

あなたの他のオプションは、ショットが発射された場所の位置を保存し、次のようなものを比較することです:

if (isShotted == true && (shotPosition.initialX+150 >= shotPosition.currentX) )

ただし、プレイヤーとオブジェクトが座標系をどのように移動するかという観点から、これについて考えてください。プレーヤーが x 軸に関して常に静止している場合、画面上を走り回ることができる場合と比較して、物事を単純化できます..

于 2012-12-19T16:07:24.660 に答える