所以只需建立一个物品和库存/装备系统。不知道从哪里开始
我这样做的解决方案是有一个基本的物品类,然后像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