我有一個類「單位」,它擁有我遊戲中所有單位共享的函數和變量。然後我用一個「士兵」班擴展它。單位有一個靜態變量,用於保存基本紋理(因爲創建時該類型的所有單位都是相同的,紋理可能隨時間而改變)。子類覆蓋父類變量?
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