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. 教你如何做好SEO优化中的前端优化

    网站的速度是很多人都面临的问题,其实许多网站,都没有特意的去优化加载速度,对于一个网站来说,加速不但提高了用户体验(如果一个网站在几秒内没 有打开,大多数用户选择的是关闭而非等待),而且对于SEO的流 ...

  2. Play framework 2.0 -应用程序全局设置(转)

    转载自: http://shenbai.iteye.com/blog/1517366 1.全局对象 在工程中定义全局对象可以允许你操作你的应用程序的全局设置.这个全局对象必须定义在根包下. impor ...

  3. DataGridView批量执行Insert和Remove行时特别慢的解决方案

    向DataGridView循环插入110条数据耗时5秒多. 在循环前执行: var oldAutoSizeRowsMode = this.AutoSizeRowsMode; var oldAutoSi ...

  4. 在ASP.NET MVC中使用CKEditor和CkFinder

    在你需要使用editor控件的页面头部添加: <head> ... <script type="text/javascript" src="/ckedi ...

  5. Oracle练习题(1~19)

    1. 查询Student表中的所有记录的Sname.Ssex和Class列. 2. 查询教师所有的单位即不重复的Depart列. 3. 查询Student表的所有记录. 4. 查询Score表中成绩在 ...

  6. for循环往Oracle中插入n条数据,主键自增

    1.主键自增实现方法:http://www.cnblogs.com/Donnnnnn/p/5959871.html 2.for循环往Oracle中插入n条数据 BEGIN .. loop insert ...

  7. python开发规则

    1.Python优点:简单.优雅.明确 python缺点 2.强大的模块三房库 1.代码不能加密 3.易移植 2.速度慢 4.面向对象 5.可扩展(c\java\c#....) cpython ipy ...

  8. 在phpmyadmin中执行sql语句出现的错误:Unknown storage engine 'InnoDB'

    在phpmyadmin中执行sql语句出现的错误:Unknown storage engine 'InnoDB' 解决方法:解决方法:             1.关闭MySQL数据库       2 ...

  9. 获取css style值

    var obj=document.getElementById("btn");var currentStyle=null;if(obj.currentStyle){ current ...

  10. Android Phonebook编写联系人UI加载及联系人保存流程(二)

    2014-01-06 17:18:29 1. Phonebook中新建/编辑联系人的UI不是用xml文件写的,它是随着帐号类型的改变来加载不同的UI,比如SIM联系人,只有Name.Phone Num ...