【发布时间】:2017-09-13 07:31:56
【问题描述】:
我游戏中的所有对象都继承了我的 Sprite 类。这是我正在使用的层次结构:
Sprite > StaticObject > MovingObject > 角色 > 玩家
我在我的主游戏类中编写了一个函数,它搜索游戏中的所有对象并找到任何“Player”对象。如果找到 Player 对象,它会将对象的速度值(v2Speed 向量)打印到屏幕上。
foreach (var gameObject in GameInfo.gameInfo.gameObjects)
{
if (gameObject.GetType() == typeof (Player))
{
string sPlayerPosition = string.Format("Player position: ({0:0.00},{1:0.00})", gameObject.v2Position.X, gameObject.v2Position.Y);
DrawWithShadow(sPlayerPosition, new Vector2(10, 60));
string sPlayerSpeed = string.Format("Player speed: ({0:0.00},{1:0.00})", gameObject.v2Speed.X, gameObject.v2Speed.Y);
DrawWithShadow(sPlayerSpeed, new Vector2(10, 80));
}
}
但是,这只有在我将 v2Speed 放入基础 Sprite 类时才有效。我假设这是因为编译器想要在游戏正在搜索的每个对象中找到变量。我不确定为什么这是一个问题,因为访问 v2Speed 的代码只应用于 Player 对象,该对象将始终定义该向量。我真的不想在任何高于 MovingObject 类的类中使用 v2Speed,因为 Sprite 和 StaticObject > 游戏开始后物体永远不会移动。
我的问题是我如何重写上面的代码来访问 v2Speed 如果它存储在 MovingObject 类而不是 Sprite 类?
【问题讨论】:
标签: c# oop inheritance