Когда «враг» достигает путевой точки, все враги переходят к следующей путевой точке в очереди ... Почему? - PullRequest
2 голосов
/ 22 августа 2010

Вот код, над которым я работаю, я хочу, чтобы все враги пошли в каждую точку самостоятельно; однако, когда один враг поражает путевую точку, все враги переходят на следующую путевую точку. Как мне это исправить?

Я запускаю это с основного, у меня есть класс врага, и я передал очередь в качестве параметра, когда создается мой враг. Исходная очередь называется 'wayQ', скопированная, которую используют мои враги, называется 'way'.

Edit: Здесь класс противника. Я изменил код, чтобы переопределить основной метод обновления.

class Enemy : GameObject
{
    public Texture2D texture;
    public float scale = 0.3f;
    public Queue<Vector2> way = new Queue<Vector2>();
    private int atDestinationLimit = 1;

    public Enemy()
    {
    }

    public Enemy(ContentManager Content, int health, float speed, Vector2 vel, Vector2 pos, Queue<Vector2> wayQ)
    {
        this.Health = health;
        this.Speed = speed;
        this.velocity = vel;
        this.position = pos;
        this.IsAlive = true;
        this.texture = Content.Load <Texture2D>("SquareGuy");
        this.center = new Vector2(((this.texture.Width * this.scale) / 2), ((this.texture.Height * this.scale) / 2));
        this.centPos = this.position + this.center;
        this.way = wayQ;
    }

    public void Update(GameTime theGameTime)
    {
        if (way.Count > 0)
        {
            if (Vector2.Distance(centPos, way.Peek()) < atDestinationLimit)
            {
                float distanceX = MathHelper.Distance(centPos.X, way.Peek().X);
                float distanceY = MathHelper.Distance(centPos.Y, way.Peek().Y);

                centPos = Vector2.Add(centPos, new Vector2(distanceX, distanceY));
                way.Dequeue();
            }
            else
            {
                Vector2 direction = -(centPos - way.Peek());
                direction.Normalize();
                velocity = Vector2.Multiply(direction, Speed);

                centPos += velocity;
            }
        }
    }
}

Ответы [ 3 ]

7 голосов
/ 22 августа 2010

Измените свой Enemy класс, чтобы иметь собственную копию списка путевых точек. Создание списка путевых точек и назначение его каждому объекту Enemy дает каждому объекту Enemy ссылку на один список. Когда вы Dequeue путевая точка, вы делаете это в одном списке.

0 голосов
/ 22 августа 2010

Я изменил следующий код:

 this.way = wayQ;

до:

this.way = new Queue<Vector2>(wayQ);

Теперь все отлично работает!

0 голосов
/ 22 августа 2010

Вид трудно увидеть без кода, используемого упомянутыми врагами (который, кажется, содержит логику путевых точек). Логика гласит, что путевые точки для одного врага, по-видимому, являются общими для всех врагов - возможно, поле врага.путь объявлено статическим?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...