C ++:如何正确设置“ Item”类

时间:2018-09-28 03:58:05

标签: c++ game-engine

我目前正在制作2D平台游戏引擎,但似乎无法为“ Item”类创建精美的设计。

物品的含义是什么:玩家可以在自己的库存中保存的任何物品,例如铁或治疗药水

它如何适合我的项目-3个类处理“项目”:

  1. “广告资源”类

  2. “级别”类(存储放置的“项目”的位置)

  3. “ Player_Equipment_Slots”类。问题出在这里:

    #include "Globals.h"
    #include "Item.h"
    
    class Player_Equipment_Slots
    {
    public:
    Player_Equipment_Slots();
    Player_Equipment_Slots(Player& playerObj);
    virtual ~Player_Equipment_Slots();
    
    // return: the item that was already equipped, if there was one already equipped
    Item equipItem(Item itemToEquip);
    
    Attributes getTotalAttributes() const { return totalAttributes; }
    
    private:
    
    // applies passive effects equipment may have to the player and removes any existing one (called by equipItem)
    void updateEquipmentEffects(Item& newEquipment, Item& oldEquipment);
    // subtracts the stats of the old item and adds the new items stats (called by equipItem)
    void updateTotalAttributes();
    
    Item necklaceSlot;
    Item ringSlot1;
    Item ringSlot2;
    Item trinket1;
    Item trinket2;
    
    Attributes totalAttributes;
    
    Player& playerObj;
    };
    

问题:Item类具有两个构造函数

    ItemDetails();
    ItemDetails(std::string itemName, itemType itmType, rarity itemRarity, Coordinate itemIconCoord, std::string effect);

理想情况下,我想摆脱默认的构造函数,因为只能使用第二个构造函数创建一个项,但是如果这样做,Player_Equipment_Slots类将在编译时抱怨,因为-

    Item necklaceSlot;
    Item ringSlot1;
    Item ringSlot2;
    Item trinket1;
    Item trinket2;

对象需要调用默认构造函数。

问题:我将如何重新设计这些类,以使我的Item类没有默认的构造函数,而其他类(例如Player_Equipment_Slots)可以存储私有Item对象。 我知道可以很容易地通过指针来实现,但是我想避免每次创建新项时都使用'new'关键字。也许还有一种方法可以使用指针而不使用'new'关键字,但是我不确定如何实现。

1 个答案:

答案 0 :(得分:0)

使用继承,Item用于不同的使用类别(仅是建议),如果您不想使用默认构造函数,只需将其删除Item()=delete或放入 private