相关疑难解决方法(0)

在实体组件系统中拆分组件需要太多的重构

我有一个使用实体组件系统(ECS)的现有工作C ++游戏库。

我的图书馆的用户想创建一些组件,例如Cat:-

class Cat{ public:
    int hp;
    float flyPower;
};
Run Code Online (Sandbox Code Playgroud)

他可以通过以下方式修改hp每个内容cat

for(SmartComponentPtr<Cat> cat : getAll<Cat>()){
    cat->hp-=5;  //#1
}
Run Code Online (Sandbox Code Playgroud)

几天后,他想拆分CatHPFlyable:-

class HP{ public:
    int hp;
};
class Flyable{ public:
    float flyPower;
};
Run Code Online (Sandbox Code Playgroud)

因此,每次cat访问hp都会编译错误(例如,#1在上面的代码中)。

为了解决这个问题,用户可以将他的代码重构为:

for(MyTuple<HP,Flyable> catTuple : getAllTuple<HP,Flyable>()){
    SmartComponentPtr<HP> hpPtr=catTuple ; //<-- some magic casting
    hpPtr->hp-=5; 
}
Run Code Online (Sandbox Code Playgroud)

它可以工作,但是需要在用户代码中进行大量重构(调用的各个位置cat->hp)。

在ECS中拆分组件时如何编辑框架/引擎以解决可维护性问题?

我从未发现过任何不会受到此问题困扰的方法,例如:-

c++ maintainability game-engine c++14 entity-component-system

7
推荐指数
1
解决办法
237
查看次数