我试图通过派生类访问受保护的变量。这一切都有效,直到变量开始变化,因为派生类永远不变的变量。
简化的父类(剥离不重要的东西):
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 :(得分: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
。这样可以避免上面例子中描述的问题。