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.

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

  1. Unity下一轮最大的变革-Entity Component System & C# Jobs System

    ECS+jobs实现的酷炫效果 新一代Entity Component System(ECS)将会彻底改变Unity的底层概念(GameObject-Component 系统)和现有工作方式.Mono ...

  2. github 排名前100的项目

    dotnet/roslyn The .NET Compiler Platform ("Roslyn") provides open-source C# and Visual Bas ...

  3. Game Development Patterns and Best Practices (John P. Doran / Matt Casanova 著)

    https://github.com/PacktPublishing/Game-Development-Patterns-and-Best-Practices https://github.com/m ...

  4. 剖析虚幻渲染体系(14)- 延展篇:现代渲染引擎演变史Part 1(萌芽期)

    目录 14.1 本篇概述 14.1.1 游戏引擎简介 14.1.2 游戏引擎模块 14.1.3 游戏引擎列表 14.1.3.1 Unreal Engine 14.1.3.2 Unity 14.1.3. ...

  5. 我所理解的Cocos2d-x

    我所理解的Cocos2d-x(完全基于Cocos2d-x3.0,深度剖析计算机图形学,OpenGL ES及游戏引擎架构,全面提升游戏开发相关知识) 秦春林 著   ISBN 978-7-121-246 ...

  6. Cocos2d-x 3.0 事件系统【转】

    事件系统,是一个软件的核心组成部分.从小处讲它是应用程序内部各模块交互的设计模式,从大处讲,它是软件架构的组成模块.在现代软件开发中,操作系统通常通过一些预定义的事件,告知应用程序发生的一些事情如用户 ...

  7. Unity ECS 视频笔记

    视频摘要 本文视频资料:使用Entity Component System开发<快乐的Minecraft>游戏 使用Unity2018及以上版本才有ECS功能. 本文是看视频的一些摘要. ...

  8. A-Frame WebVR开发新手教程

    WebVR和WebGL应用程序接口使得我们已经能够在浏览器上创建虚拟现实(VR)体验.但从project化的角度而言,开发社区还须要很多其它方便强大的开发库来简化编程.Mozilla的 A-Frame ...

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

    7月31日,2018云创大会游戏论坛在杭州国际博览中心103B圆满举行.本场游戏论坛聚焦探讨了可能对游戏行业发展有重大推动的新技术.新实践,如AR.区块链.安全.大数据等. Unity大中华区技术经理 ...

随机推荐

  1. spring使用jackson返回object报错:Handler execution resulted in exception: Could not find acceptable representation

    问题:在springmvc中添加Jackson jar包返回Object类型,处理器方法的produces属性不写,默认根据类型,但如果指定了(错误原因)produces = "text/h ...

  2. Css3动画缩放

    Css3缩放动画 transform-scale() scale();值 0~1   0-隐藏  1-默认 小于0缩放 大于1放大 例:transform:scale(0.98);

  3. Linux下lzop命令安装

    [root@xd502djj ~]# yum install lzop Loaded plugins: fastestmirror Determining fastest mirrors * base ...

  4. comboBox的多选框之疑难杂症——逗号篇

    提笔写正文之前,首先要再次提醒一下自己,因为总是记不住,以至大神同事们都开始用“嫌弃”的眼光看自己了——遇到问题,自己去解决,没有什么问题是解决不掉的,不要在没认真努力思考之前就去麻烦大神同事,切记切 ...

  5. jquery用Ajax中的回调函数时注意事项

    前端代码 <script language="javascript" type="text/javascript" src="<?php ...

  6. JDE修改Grid列样式

    Set Grid Color :to change the background color of a cell, row, column, or the entire control. Set Gr ...

  7. oracle建库及plsql建表空间的用法

    所有程序—>ORACLE-JHEMR----------->配置和移植工具----->DataBase Configuration Assistant-------中间就需要改一个数 ...

  8. 测试JdbcTemplate执行SQL语句和存储过程

    我在项目中需要使用到oracle的语句片段和存储过程.下面就是我的测试案例: public class DbTest extends BaseTestCase { @Resource JdbcUtil ...

  9. 原创:整理编辑jQuery全部思维导图【附下载地址】

    主图 全部图已经打包:下载地址 2. 3. 4. 5. 6. 附上一点简单说明 Dom对象和jquer对象之间的转化 如何将一个jquery对象转换为DOM对象? test是一个span元素 var ...

  10. 0302IT行业就业&软件工程之我所思和所想

    阅读以下文章 http://www.thea.cn/news/terminal/9/9389.html http://www.shzhidao.cn/system/2015/09/22/0102610 ...