我有一个“单元”类,它包含我游戏中所有单元将共享的函数和变量。然后我用“士兵”类扩展了它。单元有一个静态变量来保存基础纹理(因为创建时该类型的所有单元都是相同的,纹理可能会随着时间而改变)。这些是通过以下方式加载的:
Unit.baseTexture = content.Load<Texture2D>("worker");
Soldier.baseTexture = content.Load<Texture2D>("soldier");
当从“Unit”构造函数创建“Unit”时,它将加载纹理:
this.texture = Unit.baseTexture;
创建“士兵”时,它将像这样加载它:
this.texture = Soldier.baseTexture;
纹理是一个受保护的变量,不是静态的,所以它应该是每个对象一个。
在主游戏逻辑中,我有一个 ArrayList,其中存储了多个 Unit 和 Soldier 对象。
当我遍历它们时,我正在做:
foreach (Unit unit in unitList)
{
unit.Draw(spriteBatch);
}
Draw 是 Unit 类的一个函数:
spriteBatch.Draw(this.texture, this.position, Color.White);
但是,这会导致所有单位都使用最后加载的纹理(在本例中为士兵纹理)进行绘制。这让我感到困惑,因为我先调用父类,然后是子类。如果绘制的是每个对象的纹理,为什么加载士兵纹理也会改变单位纹理?