访问不断变化的受保护变量

时间:2014-07-26 09:23:53

标签: c# xna-4.0

我试图通过派生类访问受保护的变量。这一切都有效,直到变量开始变化,因为派生类永远不变的变量。

简化的父类(剥离不重要的东西):

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在整个运行时间有多少变化。

我做错了什么?

1 个答案:

答案 0 :(得分: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()方法virtualoverride。这样可以避免上面例子中描述的问题。