首先,我知道这个问题与游戏开发相关,但我决定在这里问它,因为它真的归结为一个更普遍的软件工程问题。
在过去的一个月里,我读了很多关于实体组件系统的文章,现在我对这个概念相当满意。然而,似乎缺少一个明确的“定义”,不同的条款提出了截然不同的解决办法:
这就是ECS是否应该破坏封装的问题。换句话说,它是OOP风格的ECS (组件是既具有状态又具有行为的对象,它封装了特定于它们的数据)和纯ECS (组件是c风格的结构,只有公共数据和系统提供功能)。
注意,我正在开发一个Framework / API / Engine。因此,目标是它可以很容易地由谁使用它扩展。这包括添加一种新类型的呈现或冲突组件。
OOP方法的
带纯方法的
虽然我看到了纯方法的美妙之处,但我并不真正理解它比传统的OOP有什么具体的好处。组件之间的依赖关系仍然存在,尽管隐藏在系统中。此外,我还需要更多的类来完成相同的目标。在我看来,这似乎是一种有点过度设计的解决方案,从来都不是一件好事。
此外,我并没有在性能上相互关联,所以这个面向数据的设计和cashe错过的整个想法对我来说并不重要。我只想要一个漂亮的建筑^^
尽管如此,我读到的大多数文章和讨论都提出了第二种方法。为什么?
最后,我想问一个问题,我将如何处理纯ECS中的动画。目前,我已经将动画定义为基于0到1之间的一些进展来操纵实体的函子。动画组件有一个动画列表,其中有一个动画列表。在其更新功能中,它将当前活动的任何动画应用于实体。
注:
我刚刚读到了实体组件体系结构是由定义面向对象的吗?这篇文章,它比我更好地解释了这个问题。虽然基本上是在同一主题上,但as仍然没有给出任何答案,说明为什么纯数据方法更好。
发布于 2018-12-04 18:40:58
https://softwareengineering.stackexchange.com/questions/369066
复制相似问题