2

私は XNA 4.0 を初めて使用し、プレイヤーが敵に飛び降りて殺すスーパー マリオ ブラザーズ タイプのゲームを作成しようとしています。しかし、敵を倒すのに問題が発生しました。敵の四角形rectangleBoxと交差するとenemy.alive = false. そしてこれならenemy.alive = false敵を引き寄せません。ただし、これは長方形が交差する時間にのみ適用されます。敵が境界を離れると、rectangleBox再び出現します。ゲームを再起動するまで敵が再出現しないように、敵を完全に削除するにはどうすればよいですか?

敵のクラスコード:

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace notDMIG
{
    class Enemy
    {
        public Texture2D texture;
        public Rectangle bounds;
        public Vector2 position;
        public Vector2 velocity;
        public float timer = 0.0f;
        public int spriteNum = 1;
        public int maxSpriteNum;
        public bool alive;

        public Enemy(Texture2D Texture, Vector2 Position, Vector2 Velocity, int maxsprites)
        {
            texture = Texture;
            position = Position;
            velocity = Velocity;
            maxSpriteNum = maxsprites;
            alive = false;
        }
    }
}

Game1.cs 敵関連コード

protected override void Update(GameTime gameTime)
{
    foreach (Enemy enemy in Enemies)
    {
        enemy.alive = true;

        Rectangle rectangleBox = new Rectangle((int)player.position.X, (int)player.position.Y + player.sprite.Height + 15, player.sprite.Width, 1);
        Rectangle enemyBox = new Rectangle((int)enemy.position.X, (int)enemy.position.Y, enemy.texture.Width, enemy.texture.Height);

        if (enemy.alive == true)
        {
            if (rectangleBox.Intersects(enemyBox))
            {
                enemy.alive = false;

                continue;
            }
        }
    }
}

protected override void Draw(GameTime gameTime)
{
    foreach (Enemy enemy in Enemies)
    {
        if (enemy.alive == true)
        {
            spriteBatch.Draw(enemy.texture, enemy.position, Color.White);
        }
    }
}
4

2 に答える 2

3

あなたのenemy.alive = trueをUpdateメソッドに入れる代わりに、これをinitializeメソッドに配置することをお勧めします。初期化メソッドはプログラムの開始時 (技術的には、すべての敵が生きている必要があります) にのみ呼び出されますが、更新メソッドは 1 秒間に何百回も呼び出されます。したがって、プログラムが行っているのは、「敵がプレイヤーと交差し、敵が死亡し、次の更新ループが発生し、敵が再び生きている」ということです。

そうそう、Update の代わりに初期化メソッドに配置するだけです。

于 2013-06-04T10:28:08.900 に答える