我有一个类“单位”,它拥有我游戏中所有单位共享的函数和变量。然后我用一个“士兵”班扩展它。单位有一个静态变量,用于保存基本纹理(因为创建时该类型的所有单位都是相同的,纹理可能随时间而改变)。子类覆盖父类变量?
Unit.baseTexture = content.Load<Texture2D>("worker");
Soldier.baseTexture = content.Load<Texture2D>("soldier");
当从“单元”构造函数创建一个“单元”,它会加载与所述纹理:这是由加载在创建“士兵”
this.texture = Unit.baseTexture;
,它将加载它是这样的:
this.texture = Soldier.baseTexture;
纹理是一个受保护的变量,而不是静态的,所以它应该是每个对象一个。
在主要的游戏逻辑中,我有一个ArrayList,它有多个Unit和Soldier对象存储在其中。
当我通过他们循环,我做的:
foreach (Unit unit in unitList)
{
unit.Draw(spriteBatch);
}
平局是在股类中的函数:
spriteBatch.Draw(this.texture, this.position, Color.White);
然而,这导致所有单位最后加载的画纹理(在这种情况下,士兵纹理)。这让我感到困惑,因为我先调用父类,然后调用子类。为什么加载Soldier纹理也改变了Unit纹理,如果绘制的是每个对象的纹理?
你能详细说明一下吗?我是csharp的新手,没有听说过术语属性。 – MatthewMcGovern
添加了一个示例。 – JLRishe
啊,非常感谢你。这很有道理! – MatthewMcGovern