【转】Fast Entity Component System

http://entity-systems.wikidot.com/fast-entity-component-system

Summary

  • Create a generic System class which stores Components as a Vector array, allows access to them, and processes its data when called.
  • Create an Entity Manager that re-uses expired entity id‘s, if possible, and facilitates the clean removal an entity by removing it from all systems.
  • Components are classes. Ideally, component classes do not have external methods, but that doesn‘t mean they aren‘t allowed.
  • The Entity is represented by an integer, not its own class.
  • The Entity‘s integer value is equal to the index of its data in any given system‘s object array. This allows "fast" access to its data. The biggest tradeoff is a potential for null values between "active" indices, bloating the object array.
  • A simple version can be seen in action at Open Processing.

Perhaps add the word "Index" into the name somewhere? Perhaps "Fast Entity-Indexed Component System" ?
I think it would help underlne the key innovative step in this approach — tmachine

Implementation

Concepts

  • Entity: An integer.
  • Entity Manager: A singleton class.
  • Component: A class with data.
  • System: A generic class with methods and an object array.
  • Component System: A singleton class that extends System using a specific Component class.

Duties

  • Entity: A handle shared by all systems. It has no idea what components it has.
  • Entity Manager: Prevents duplicate IDs from being handed out.
    Recycles IDs that have been removed from all component systems. Handles
    the removal of an entity from all component systems.
  • Component: Holds data of a specific type. If things get dirty (as
    rapid game development often does), it can have methods for other
    systems to work with that data, such as a vector class that can return
    its magnitude.
  • System: (This is a generic class, and never used directly) Manage an
    array of Components of a specified class, using the value of Entity as
    an index. Has methods to add, update, get, remove, and process that
    data.
  • Component System: Extends System with the Component‘s class. Almost always overrides the Process function.

Expansion

Out of the box, it is only possible to process (or try to process)
every object, in every system, each frame. But the framework also allows
a system to process individual entities. This could lead to a "group"
class that manages its own list of entity ID‘s, preventing wasted cycles
on "blank" entries in systems. It would still use the Entity Manager to
create and destroy entities.

Source Code for FECS Framework

Java

http://www.openprocessing.org/visuals/?visualID=18023 - Note that this requires Processing. It can easily be ported to pure Java, however.

时间: 2024-11-21 03:01:32

【转】Fast Entity Component System的相关文章

如何通过实体组件系统在Javascript中构建游戏

How to Build an Entity Component System Game in Javascript Creating and manipulating abstractions is the essence of programming. There is no "correct" abstraction to solve a problem, but some abstractions are better suited for certain problems t

A-Frame WebVR开发新手教程

WebVR和WebGL应用程序接口使得我们已经能够在浏览器上创建虚拟现实(VR)体验.但从project化的角度而言,开发社区还须要很多其它方便强大的开发库来简化编程.Mozilla的 A-Frame 框架就是这样一个工具.提供了一个Web开发人员所熟悉的标记语言来高速构建3D VR场景动画原型.而不须要编写过多的JavaScript和GLSL语句. 本文将介绍怎样使用A-Frame构建一个简单的在线可执行实例.你能够先看下在线演示效果. 參考文档:A-Frame中文文档开发指南在线教程 概览

A-Frame WebVR开发入门教程

WebVR和WebGL应用程序接口使得我们已经可以在浏览器上创建虚拟现实(VR)体验,但从工程化的角度而言,开发社区还需要更多方便强大的开发库来简化编程,Mozilla的 A-Frame 框架就是这样一个工具,提供了一个Web开发者所熟悉的标记语言来快速构建3D VR场景动画原型,而不需要编写过多的JavaScript和GLSL语句.本文将介绍如何使用A-Frame构建一个简单的在线可运行实例.你可以先看下在线演示效果. 概览 当前A-Frame版本是0.5.0,由于WebVR标准乃至WebGL

web-VR(虚拟现实)

WebVR和WebGL应用程序接口使得我们已经可以在浏览器上创建虚拟现实(VR)体验,但从工程化的角度而言,开发社区还需要更多方便强大的开发库来简化编程,Mozilla的 A-Frame 框架就是这样一个工具,提供了一个Web开发者所熟悉的标记语言来快速构建3D VR场景动画原型,而不需要编写过多的JavaScript和GLSL语句.本文将介绍如何使用A-Frame构建一个简单的在线可运行实例.你可以先看下在线演示效果. 概览 当前A-Frame版本是0.5.0,由于WebVR标准乃至WebGL

我所理解的Cocos2d-x

我所理解的Cocos2d-x(完全基于Cocos2d-x3.0,深度剖析计算机图形学,OpenGL ES及游戏引擎架构,全面提升游戏开发相关知识) 秦春林 著   ISBN 978-7-121-24625-8 2014年11月出版 定价:79.00元 404页 16开 内容提要 <我所理解的Cocos2d-x>针对最新的 Cocos2d-x3.x版本,介绍了Coco2d-x游戏引擎的基本架构.渲染机制,以及各个子模块的功能和原理,并结合OpenGL ES图形渲染管线,深入探讨了游戏开发中涉及的

cocos2dx3.x的所有事件总结

事件系统,是一个软件的核心组成部分.从小处讲它是应用程序内部各模块交互的设计模式,从大处讲,它是软件架构的组成模块.在现代软件开发中,操作系统通常通过一些预定义的事件,告知应用程序发生的一些事情如用户输入,内存不足等. 然而,通常我们并不直接使用系统事件,例如一个界面可能不同区域的元素对触摸事件的理解都不一样,在某些情况下需要优先处理某些逻辑,这就需要对系统事件再包装,以应对界面复杂的元素和逻辑.另一方面,我们需要一个事件系统用来在应用程序内部分发消息,例如当敌人进入攻击范围时通知英雄射击,当敌

【总结】游戏框架与架构设计(Unity为例)

使用框架开发游戏 优点:耦合性低,重用性高,部署快,可维护性高,方便管理.提高开发效率,降低开发难度 缺点:增加了系统结构和实现的复杂性,需要额外花费精力维护,不适合小型程序,易影响运行效率   常见框架 MVC  表现层(View):游戏画面.UI 逻辑层(Controller):数据接口,操作控制,AI 数据层(Model):数据保存,图片.声音等资源 我的SFramework中,View层是单独的,Model我放在基类中,Controller则在派生类,实现了MVC的分离(如果要重构的话我

如何实现最佳的跨平台游戏体验?Unity成亮解密实时渲染技术!

7月31日,2018云创大会游戏论坛在杭州国际博览中心103B圆满举行.本场游戏论坛聚焦探讨了可能对游戏行业发展有重大推动的新技术.新实践,如AR.区块链.安全.大数据等.Unity大中华区技术经理成亮表示,实时渲染技术的跨平台性能让游戏体验变得更好 Unity大中华区技术经理成亮做了<解秘Unity2018最新实时渲染技术>的主题演讲,分享了2018年Unity在实时渲染方面实现的三个重要技术,包括图形相关的可编程渲染管线.基于渲染管线推出的Shader Graph.PostProcess工

(持续更新)Qt3D 学习资源

目录 一.前言 1.1 什么是Qt3D 1.2 Qt3D 的利与弊 利:原生支持 弊处:资料过少 二.学习建议 2.1 OpenGL 学习资料 2.2 Qt3D 资料 2.2.1 视频资料 2.2.2 PPT和博客 2.2.3 教程 2.2.4 问答 2.2.5 项目源码 一.前言 最近用Qt3D做了一个三维显示的项目,过程比较艰辛,主要是Qt3D这个库虽然推出了有几年,但是资料并不多,官方的例程比较少且大多是QML的,虽然他本身是完全支持C++的,而API 接口的文档写得又比较简略,用的人少产