【步兵 c++】組件模式--基礎篇

【步兵 c++】組件模式–基礎篇 by EOS.

最近比較忙,所以就偷懶了一個星期,現在又有大把的時間寫博客了,不要問我爲什麼,
這是一個悲傷的故事,前段時間的忙變得毫無意義了。

由於好久沒用c++了,感覺再不用用就要忘球了,所以決定用c++來寫。


爲什麼用組件

最近發現組件模式的魅力了,請原諒以前愚昧無知的我。因爲最近做的兩個項目都是rpg,
相對以前做的遊戲功能模塊數,業務邏輯量都成幾何倍數增長。
(ps:大概是個二元一次方程?=、= 誰發明的詞,唬人,不過我喜歡。)

在這樣的情況下,組件模式的優點就凸顯出來,一是管理方便直觀,二是能解耦,模塊分離,
三是拓展性好(也算模塊化的優點),插入刪除功能方便。

用形(kua)象(zhang)點的說法來,誇比喻一下:
組件模式:
好比是積木,你拼出一個機器人,想換個胳膊拔掉,換一個插上,好使~
臉也不要臉。。拔掉!沒有任何問題。

高耦合:
好比是魔方,我這功能不想要了啊,怎麼辦呢,啪,摔地上,把不要的這塊撿起來。
發現以前的東西已經支離破。
(ps:哈哈,小時候爲了拼6面,機智的我就拆過魔方~)


上代碼

這裏只是舉例,不是實際使用代碼,但包含一些思路:
先上結果把,明白的人就不用往下看了,畢竟時間是寶貴的麼=、=
這裏寫圖片描述

//首先是枚舉
enum EMComomponent
{
    Start = 0,
    Attribute = Start, --方便全部遍歷 比如 for(int i = start; i < max; i++)
    Show,
    Max,
    Error,
};

//map是必要的,不然頻繁操作,遍歷會浪費大量時間。和excel的道理一樣。
class Entity
{
public:
    template<class T>
    T* GetComomponent()
    {
        return (T*)comomponents[T::getDef()];
    };

    template<class T>
    void AddComomponent(T* t)
    {
        comomponents[t->getDef()] = t;
    };

protected:
    map<int, ESComomponent*> comomponents;
};

//基類
class ESComomponent
{
public:
    CMPT_DEF_H(ESComomponent)
};
CMPT_DEF_C(ESComomponent, EMComomponent::Error);

//一個顯示用的組件,比如用做人物的顯示
class ShowComomponent : public ESComomponent
{
public:
    CMPT_DEF_H(ShowComomponent);
    void hide() { printf("what ??"); }//笑點get到了麼=、=
};
CMPT_DEF_C(ShowComomponent, EMComomponent::Show);

就這樣我的一個閹割版的組件模式就完成了, 寥寥數行而已。
當然實際上使用上要複雜的多,但是萬變不離其宗。


補漏

我知道你要說什麼,給你~ 給你!
放在一起不是太亂麼=、= 絕對沒有其他的心思

#define CMPT_DEF_H(cls) static int getDef();
#define CMPT_DEF_C(cls,v) static int s_em_##cls = v;\
int cls##::getDef()\
{\
    return s_em_##cls;\
}

#define INSTANCE_FUNC_H(cls) static cls* getInstance();
#define INSTANCE_FUNC_C(cls) static cls* s_only_##cls = nullptr;\
cls* cls##::getInstance()\
{\
    if (s_only_##cls == nullptr)\
    {\
        s_only_##cls = new cls();\
    }\
    return s_only_##cls;\
}

總結

基礎篇都先寫到這裏,c++好久沒用果然有些生疏了=、=
c++好,c++妙,編譯划水呱呱叫。 腳本快、腳本狠,不讓休息累死個人。

See Again~
之前
真愛無價,歡迎打賞~
讚賞碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章