Architecture 实体组件系统:放置渲染逻辑的位置
我目前正在学习“实体组件系统”。 在阅读了许多教程和论坛帖子之后,我仍然想知道渲染逻辑应该去哪里。我不是在说实际的OpenGL/DirectX渲染代码,例如,它使用一个精灵进行渲染。我的意思是决定渲染哪个精灵的逻辑 可见实体需要三个方面:Architecture 实体组件系统:放置渲染逻辑的位置,architecture,entity-system,component-based,Architecture,Entity System,Component Based,我目前正在学习“实体组件系统”。 在阅读了许多教程和论坛帖子之后,我仍然想知道渲染逻辑应该去哪里。我不是在说实际的OpenGL/DirectX渲染代码,例如,它使用一个精灵进行渲染。我的意思是决定渲染哪个精灵的逻辑 可见实体需要三个方面: 评估AI(改变位置、状态等) 评估渲染状态。例如,当实体正在行走、攀爬、被击中时,要使用哪个精灵循环 实际渲染精灵 大多数教程建议使用AISystem(1.)之类的工具来表示逻辑,使用RenderSystem(3.)来显示RenderComponent中定义的
- SomeModel(从AbstractModel继承)
- SomeController(从AbstractController继承)
- SomeRenderer(继承自PixelRenderer,而后者又继承自AbstractRenderer)
- SomeModelSpecificDataComponent(即特定于此语义实体的数据)
- SomeModelSystem(执行逻辑的)
- SomeModelSpecificRenderComponent(即呈现特定于此语义实体的数据)
- SomeModelSpecificRenderLogicSystem(决定如何渲染的系统)
- 像素渲染系统
我有没有办法减少需要引入的新系统的数量?一种解决方案可能是添加“代理”或“行为对象”:一般的RenderingComponent附加到某个“RenderingAgent”类的实例上,该类有一个在RenderSystem中调用的方法“Update”。因此,从技术上讲,组件本身并不包含逻辑。不过,我担心这可能是设计过度。经过一段时间的思考和多次讨论,我意识到我的思维方式可能是错误的。我所描述的对于香草ECS方法实际上是正确的 防止系统和组件爆炸的唯一方法是对游戏元素进行适当的抽象,这样可以描述渲染的各种需求,而不是编程 我的意思是,例如,sprite引擎必须允许足够的抽象,您只能通过存储在渲染系统评估的渲染组件中的描述来表达各种动画和状态。您还需要做的是将解决方案正确地拆分为可重用的部分
这样,ECS比其他模式更能迫使您真正思考一个好的架构。谢谢您的提示,很抱歉给您带来困惑。我添加了更合适的标记。当你说抽象时,你说的是继承吗?或者你真的明白了