0
我試圖實現一個高性能的遊戲庫存系統。我有這個抽象基類來存儲不同類型的物品的庫存中,例如,硬幣,手電筒,刀等。創建遊戲庫存系統,無需轉換爲派生
public abstract class ObtainableItem
{
public string Name { get; private set; }
public ObtainableItem(string name)
{
Name = name;
}
}
例如,我有打開的門的DoorKey。 DoorKey具有用於打開門的屬性KeyCode。
public class DoorKey : ObtainableItem
{
public int KeyCode { get; private set; }
public DoorKey() : base("key")
{
KeyCode = 1234;
}
}
所有ObtainableItem都存儲在庫存
public class Inventory
{
const int slotCount = 2;
ObtainableItem[] slots = new ObtainableItem[slotCount];
public Inventory()
{
slots[0] = new DoorKey();
}
}
現在想象一下,用戶從他的庫存拖累DoorKey在門上,並觸發Open方法
public class Door
{
public void Open(ObtainableItem key)
{
if (key is DoorKey)
{
DoorKey doorKey = (DoorKey)key;
if (doorKey.KeyCode == 1234)
{
// Open door
}
}
else
{
// "can't use this item on a door"
}
}
}
如何避免投從ObtainableItem到DoorKey?我讀過使用鑄造是不好的做法,它指向了錯誤的代碼設計。理想情況下,一門類應該看起來像這樣。我的庫存系統有什麼樣的模式?
public class Door
{
public void Open(DoorKey key)
{
if (key.KeyCode == 1234)
{
// Open door
}
}
}
你在哪裏讀過*鑄造是不好的做法*,我從來沒有讀過任何這樣的東西。 –
@ErikPhilips可以指出拳擊/開箱的開銷 –
@RandRandom是的,然後它* boxing/unboxing可能會導致性能問題*這是顯着不同於*糟糕的做法*。 –