如何在实体系统中实现功能?
询问实体系统(两个问题后1,2),并阅读一些文章在他们身上,我想我理解他们比以前好多了。我仍然有一些不确定性,主要是关于构建粒子发射器,输入系统和相机。我显然在理解实体系统方面仍然存在一些问题,它们可能适用于其他所有对象,但是我选择这三个对象是因为它们是非常不同的概念,应该涵盖相当广泛的领域,并有助于我理解实体系统以及如何理解实体系统。我自己会在遇到这些问题时处理这些问题。 我正在用JavaScript构建引擎,并且已经实现了大多数核心功能,其中包括:输入处理,灵活的动画系统,粒子发射器,数学类和函数,场景处理,相机和渲染以及一大堆引擎通常支持的其他功能。我阅读了Byte56的回答,这使我对将引擎制作为实体系统感兴趣。它仍将是具有基本场景概念的HTML5游戏引擎,但它应支持从组件动态创建实体。 我现在遇到的问题是将我的旧引擎概念适合这种新的编程范例。这些是以前的问题中的一些定义,这些定义已更新: 一个实体是一个标识符。它没有任何数据,它不是对象,它是一个简单的ID,代表所有实体的场景列表中的索引(我实际上计划将其实现为组件矩阵)。 甲组件是一个数据保持器,但是具有可以对数据进行操作的方法。最好的示例是Vector2D或“位置”组件。它具有data:x和y,还有一些使对数据进行操作更容易的方法:add(),normalize()等。 一个系统的东西,可以对一组满足某些要求的实体的操作; 通常,实体需要具有一组特定的组件才能进行操作。系统是“逻辑”部分,是“算法”部分,组件提供的所有功能纯粹是为了简化数据管理。 相机 相机具有Vector2Dposition属性,rotation属性以及一些将其围绕点定中心的方法。每帧都将其与场景一起馈入渲染器,并且所有对象均根据其位置进行平移。然后渲染场景。 我如何在实体系统中表示这种对象?摄像机是实体,组件还是组合(按照我的回答)? 粒子发射器 我的粒子发射器遇到的问题还是,应该是什么。我非常确定粒子本身不应该是实体,因为我想支持超过10,000个粒子,而且我相信创建这么多实体将对我的性能造成沉重打击。 我如何在实体系统中表示这种对象? 输入管理员 我要谈的最后一个是如何处理输入。在我当前的引擎版本中,有一个名为的类Input。它是一个处理程序,订阅浏览器的事件,例如按键和鼠标位置更改,并且还维护内部状态。然后,播放器类具有一个react()方法,该方法接受输入对象作为参数。这样做的好处是可以将输入对象序列化为.JSON,然后在网络上共享,从而实现流畅的多人模拟。 这如何转化为实体系统?