ゲーム内のすべてのユニットが共有する関数と変数を保持するクラス「ユニット」があります。私はそれを「兵士」クラスで拡張しました。ユニットには、基本テクスチャを保持する静的変数があります (作成時にそのタイプのすべてのユニットで同じであるため、テクスチャは時間の経過とともに変化する可能性があります)。これらは次によってロードされます。
Unit.baseTexture = content.Load<Texture2D>("worker");
Soldier.baseTexture = content.Load<Texture2D>("soldier");
「Unit」コンストラクターから「Unit」が作成されると、次のようにテクスチャが読み込まれます。
this.texture = Unit.baseTexture;
「兵士」が作成されると、次のようにロードされます。
this.texture = Soldier.baseTexture;
texture は保護された変数であり、静的ではないため、オブジェクトごとに 1 つである必要があります。
メインのゲーム ロジックには、複数の Unit オブジェクトと Soldier オブジェクトが格納された ArrayList があります。
それらをループするとき、私はやっています:
foreach (Unit unit in unitList)
{
unit.Draw(spriteBatch);
}
Draw は Unit クラスの関数です。
spriteBatch.Draw(this.texture, this.position, Color.White);
ただし、これにより、すべてのユニットが最後に読み込まれたテクスチャ (この場合は兵士のテクスチャ) で描画されます。最初に親クラスを呼び出し、次に子クラスを呼び出したので、これは私を混乱させます。オブジェクトごとのテクスチャが描画されるのに、Soldier テクスチャをロードすると Unit テクスチャも変更されるのはなぜですか?