Доступ к защищенной переменной, которая постоянно меняется

1

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

Упрощенный родительский класс (лишенный неважных вещей):

class Player
{
    protected Vector2 planeVec = new Vector2 (480/2, 600);

    public void Update(KeyboardState keyboard)
    {
        if (keyboard.IsKeyDown(Keys.Down)
        {
            planeVec.Y += 5;
        }
    }
}

и здесь приведен упрощенный производный класс:

class Projectiles : Player
{
    List<Vector2> bullets = new List<Vector2>();

    public void Update()
    {
        if (Keyboard.GetState().IsKeyDown(Keys.Space))               
        {
            bullets.Add(planeVec);
        }
    }
}

Значения Vector2 для маркеров всегда регистрируют значение (480/2, 600) независимо от того, сколько planeVec изменяется во время выполнения.

Что я делаю не так?

  • 0
    Нет необходимости указывать тег вместе с вопросом, он четко указан в поле тега
  • 0
    @SujithKarivelil О, я новичок в StackOverflow, спасибо, что указал на это.
Показать ещё 1 комментарий
Теги:
xna-4.0

1 ответ

1
Лучший ответ

Как вы называете метод Update() для класса Projectiles?

Следующие действия не будут работать, поскольку базовый класс Update() не вызывается в этом случае:

    Projectiles a = new Projectiles();
    a.Update();
    a.Update();

Следующий код вызовет только метод базового класса:

    Projectiles a = new Projectiles();
    ((Player)a).Update();
    ((Player)a).Update();

Я предлагаю обновить Projectiles.Update() следующим образом:

public void Update()
{
    base.Update();
    if (Keyboard.GetState().IsKeyDown(Keys.Space))               
    {
        bullets.Add(planeVec);
    }
}

Добавление base.Update() сначала вызовет метод базового класса, который обновит текущее состояние.

РЕДАКТИРОВАТЬ:

Я также рекомендовал бы сделать базовый метод Update() virtual и override его в производном классе. Это позволит избежать проблем, описанных в примере выше.

  • 0
    Добавление base.Update () было именно то, что нужно, все исправлено! Огромное спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню