0

我使用 mmorpg,我正在创建一个名为 chatlink 的系统。在这个系统上,当玩家在物品上按 ctrl 时,该物品会在聊天中链接,因此当它发送时,所有收到聊天消息的玩家都可以点击句子的那部分,并且会出现一个带有物品规格的窗口向上。

考虑以下情况:

玩家:嘿,我在卖<ItemA><Scale Boots>

我必须在一个类上存储以下内容,(<位置开始),(>位置结束),项目名称颜色,项目,(项目通过 void* 指针存储)。我有以下课程:

class chatitem
{
public:
    chatitem();
    ~chatitem();

    u_long m_uStartPos;
    u_long m_uEndPos;
    DWORD m_dwColor;
    void* m_pItemElem;
};

我想将它存储在地图上: map<unsigned int, chatitem*>m_chatItem哪个 unsigned 是输入它的聊天行的 id。问题是每个句子最多可以存储 3 个项目。我考虑了以下几点:

class CChatItem
{
public:
    CChatItem();
    ~CChatItem();

    u_long m_uStartPos[3];
    u_long m_uEndPos[3];
    DWORD m_dwColor[3];
    void* m_pItemElem[3];
};

或复制如下:

u_long m_uStartPos, u_long m_uStartPos2, u_long m_uStartPos3;

但我不想同时使用它们,所以有什么建议吗?

4

2 回答 2

1
std::map<unsigned, std::array<chatitem*, 3>>

看起来账单适合我。

于 2012-08-21T23:22:36.897 回答
0

您可以制作地图键类型std::tuple<unsigned int, unsigned int>。然后将元组的第二项设置为聊天行中的位置。或者你可以定义一个自定义结构来做同样的事情。

这种方法相对于数组的优势在于您对每条聊天行的项目数量没有硬编码限制。(您以后可能总是想扩展它)。

于 2012-08-21T23:22:35.200 回答