0

XNA Game Studio に問題があります。このコードが機能しない理由がわかりません。ミサイルをスポーンする方法は? ここでやろうとしているのは、スペースが押されるたびにミサイルをスポーンすることです。

protected override void Update(GameTime gameTime)
{
    // Allows the game to exit
    if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
        this.Exit();
    keys = Keyboard.GetState();
    if (keys.IsKeyDown(Keys.Up))
    {
        spaceshipRectangle.Y -= 5;
    }
    if (keys.IsKeyDown(Keys.Down))
    {
        spaceshipRectangle.Y += 5;
    }
    if(keys.IsKeyDown(Keys.Space))
    {
        missileShot = true;
        missile = Content.Load<Texture2D>("Missile");
        missileRectangle = new Rectangle(spaceshipRectangle.X, spaceshipRectangle.Y, 30, 40);
        spriteBatch.Begin();
        spriteBatch.Draw(missile, missileRectangle, Color.Green);
        spriteBatch.End();
    }
    if (missileShot = true)
    {
        missileRectangle.X += 5;
    }
    // TODO: Add your update logic here
    enemyRectangle.X -= 5;
    base.Update(gameTime);
}

ありがとうございました。

4

3 に答える 3

4

私の記憶では、XNA には?Draw()とは別のメソッドなどがあります。Update()そして、すべての描画をそのメソッドに入れます。

編集:これを試してください:

 protected override void Draw(GameTime gameTime)
 {
     spriteBatch.Begin();
     //draw all your stuff
     spriteBatch.End();
}
于 2013-11-08T15:06:23.177 に答える
2

ここで重要なのは、新しいミサイルを追加するのではなく、スペースを押すたびに上書きmissileし続けることです。ミサイルのリストが必要なようです。missileRectangle別の問題は、入力処理コード、更新コード、および描画コードが散在していることです。必要なのは、入力を処理し、必要に応じて新しいミサイルをリストに追加してから、(a) 更新コードのリストをループすることです。 、それらを移動し、(b) レンダリング コード、それらを描画します。

于 2013-11-08T15:07:30.117 に答える
0

Load() メソッドから何かをロードしないでください。Load() メソッドでテクスチャをロードします。

この行を Load() メソッドに移動してみてください。

missile = Content.Load<Texture2D>("Missile");

また、Update コードと Draw コードを分離します。

于 2013-11-09T21:23:28.977 に答える