所以只需建立一個物品和庫存/裝備系統。不知道從哪裏開始
我這樣做的解決方案是有一個基本的物品類,然後像MeleeWeapon,RangedWeapon等將具有更多具體的值和功能附屬於他們的子類。
我的問題是在這裏:
unsigned int Player::equipItem(Item item)
{
//first, we equip the item
switch (item.subClass) {
case SC::MELEE_WEAPON :
if (item.isOneHanded) {
//unequip mainhand (returns 2! so we can see if something was already there, equip mainhand slot.
//blabla
return 1; // yay!
}
break;
case SC::RANGED_WEAPON :
break;
case SC::SHIELD :
break;
case SC::ARMOR :
break;
}
return 0; //somethings fucked up.
}
所以,錯誤的是第6行,這是因爲項目沒有isOneHanded,但MeleeWeapon一樣。這在運行時肯定會安全99.9999%,但編譯器不知道。我看到了一個地方,你可以動態地將它投擲到一個MeleeWeapon手動和我一起玩,更容易混淆的錯誤,等等。
SC :: ...正是我用來識別項目的子類。
至於那種解決方案,我在尋找:
儘可能簡單,並儘可能多的解釋成爲可能。我想學習不復制粘貼!謝謝!
您必須先放下 - 然後訪問子類字段。目前你正在測試它適合什麼類 - 然後你不投。 –
*我看到了一個地方,你可以動態地將它移動到一個MeleeWeapon手動,我玩了,更容易混淆的錯誤,等等。*你嘗試了什麼,你有什麼錯誤? – Ryan
如果你知道你想使用'Item'那麼爲什麼不是項目中的'isOneHanded'?事實上,一個更好的設計是不使用'subClass'成員來說明什麼類型,並打開它。爲什麼不在項目中使用虛擬'equip'方法,然後根據實際的項目類型讓它返回所需的任何內容? – doctorlove