0

私は mmorpg を使用しており、chatlink という名前のシステムを作成しています。このシステムでは、プレイヤーがアイテムの上で Ctrl キーを押すと、アイテムがチャット上でリンクされるため、チャット メッセージを受信したすべてのプレイヤーは、送信時に文のその部分をクリックすることができ、アイテムの仕様を示すウィンドウが表示されます。上。

次のことを考慮してください。

プレーヤー : ねえ、私は と を売っ<ItemA><Scale Boots>います。

次の ( <position start )、( >position end )、 item name color、item ( item は 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_chatItemwhich 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>。次に、タプルの2番目のアイテムをチャットライン内の位置にします。または、同じことを行うカスタム構造体を定義することもできます。

配列に対するこのアプローチの利点は、チャットラインあたりのアイテム数にハードコードされた制限がないことです。(これは後でいつでも拡張できます)。

于 2012-08-21T23:22:35.200 に答える