哈Ha!我向你文章的翻译“ECS来回 -第一部分-引言”由米歇尔skypjack彩妮。
来回ECS
第1部分-简介。
当我第一次了解架构模板实体实体组件系统时,我去了Internet上寻找有关它的更多信息。但是,不幸的是,关于这个主题的讨论还不够充分,也没有资源可以描述其优缺点的不同方法。几乎每篇文章,帖子,评论(很大一部分)都是关于一个特定的实现的,仅略微提及了其他示例。
在本文中,我将尝试让您快速入门,并为您找到一些入门模型,并提供一些技巧,以便您可以制作自己的ECS。
为什么要使用ECS?
尽量不要被周围的人所迷惑。如果您正在认真地从事AAA项目,那么应该使用这样一个认真的工具的主要原因是代码的组织,而不是(仅)性能。当然,性能并不是最后的决定,但是组织良好的代码库是无价的,并且在大多数游戏中,您不会遇到性能问题,无论是使用OPP范式还是使用组件模板的其他可选实现编写的。
本质上,面向组件的编程是一种非常强大的工具,它使您可以轻松地扩展代码并加快开发周期。毫无疑问,所有这些都是您的主要目标。
当然,不要忘记性能。尽管当我们处于不同的联盟中时,在以下文章和以下介绍性文章中,我将为您提供足够的模型示例,但至少某些模型将精确地针对性能。
介绍
首先,让我们弄清楚从OOP切换到组件世界意味着什么。
粗略地说,这是事物分离的问题。想象一下您在飞机上所有物体的概念(类)。在这里,矮人,小精灵,游戏角色,石头等等都相互跟随。在我们这里,只有两种切割方法:水平切割和垂直切割。
如果垂直切割,这些概念本身将独立存在。换句话说,普通的OOP类仅此而已。
, , , . , , .
?
( ), update . , , , .
, . . , , . , .
, , - .
ECS back and forth
ECS.
, , .
«Game Programing Patterns». -.
, ECS , .
, , .
- . , , . , . , .
– . .
. , — . , .
, , , , -. - , , . , - . , , , - .
– family generator. , . , : entityx and EnTT.
family generator.
class family {
static std::size_t identifier() noexcept {
static std::size_t value = 0;
return value++;
}
public:
template<typename>
static std::size_t type() noexcept {
static const std::size_t value = identifier();
return value;
}
};
:
const auto id = family::type<my_type>();
. . , , .
family generator . , , , .
:
- ( ) . – ECS, , , - .
, , - , .
?
, , . , , . bitset .
, , . family generator , . .
, — . , , , . :
void my_nth_system(std::vector<game_objects> &objects) {
for(auto &&object: objects) {
if(object.has<position, velocity>()) {
auto &pos = object.get<position>();
auto &vel = object.get<velocity>();
}
}
}
, : , . , , .
. , . , : , , .
. , , , . , , , , , . , . , , .
, – . ? . , . , ? , - , .
: —
– .
. , . . , . .
, , - , — :). , . 0, – 1, . , , 0, 1.
? , , , 0 0, 1 1, . , N M , .
. , , . , . - , entityx, ECS C++.
bitset . . , C N > 0. C , N . C 0, . ? Bitsets – .
, , , bitsets .
, , . , , , , , -, . , : - - , , . , , , , , . bitset , .
?
, . , , , , , .
, . , , , , .
,
, , .
, , GitHub , . , .
.