【步兵 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~
之前
真爱无价,欢迎打赏~
赞赏码

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