{"repo":"zllangct/ecs","free":true,"listed":false,"github":"https://github.com/zllangct/ecs","clone":"git clone https://github.com/zllangct/ecs.git","description":"A Go-implementation of the ECS (Entity-Component-System), focus on the development of game server.","language":"Go","stars":156,"topics":["ecs","entity-component-system","game","game-development","game-server","parallel-processing","parallel-programming"],"license":"BSD-3-Clause","category":"game-templates","readme_excerpt":"ECS 这是一个ECS（Entity-Component-System）Go语言版本的实现，它聚焦于游戏领域的应用，帮助你快速构建一个高内聚、低耦合、易扩展、高性能的并行化游戏世界。 Contents 快速开始 + 安装 + 简单示例 快速了解 + 什么是ECS？ + 游戏领域为什么需要ECS？ + 基本架构 + 基本概念 - World - Entity - Component - System - Utility - Shape - FixedString - “下一帧生效\" + 设计思路 使用教程 + 创建一个World - SyncWorld - AsyncWorld - 创建一个Entity - 创建一个Component - 创建一个System 阶段事件 阶段特征 + 使用Utility与System交互 + ECS与外围系统交互 - SyncWorld - AsyncWorld + 如何处理System的执行顺序 + 如何选择不同类型的Component - 常规组件 - Free组件 - Disposable组件 - FreeDisposable组件 + 系统中获取组件的方式 + 系统间的数据流动 + 一个完整的例子 Benchmark + 测试用的代码 + 测试结果 + 结论 API文档 设计细节 + 架构 + 日志 + World + Entity + Component + System + Utility + Shape + Compound + 一次Update的执行流程 + 从添加Component到生效 + 容器 + 迭代器 + 协程池 + ECS序列化和反序列化 + ECS中的并行 + EntityID的管理 + 如何行为限制 + 优化器 + 统计器 特别注意 存在的一些问题 写在最后 TODO 快速开始 安装 简单示例 这是一个不完整的示例，但可以帮助您快速了解如何在你的程序中接入和使用ecs框架。 示例中的 为系统和组件，后面会详细介绍，完整的代码请移步 world test.go 。 快速了解 什么是ECS？ ECS是Entity-Component-System的缩写，它是一种数据驱动的架构，它将数据和逻辑分离开来，使得数据和逻辑可以独立的扩展和复用。 实体：实体代表通用对象。例如，在游戏引擎上下文中，每个粗制游戏对象都表示为实体。通常，它仅由一个唯一的ID组成。实现通常为此使用普通整数。 组件：组件将实体标记为具有特定方面的标签，并保留建模该方面所需的数据。例如，每个可能造成伤害的游戏对象都可能具有与其实体相关的健康组件。实现通常使用结构，类或关联阵列。 系统：系统是一个过程，可用于所有具有所需组件的实体。 例如，物理系统可能会查询具有质量，速度和位置成分的实体，并迭代对每个实体的组件集进行物理计算的结果。 实体的行为可以在运行时由添加、删除或修改组件的系统更改。 这消除了在面向对象编程技术中难以理解、维护和扩展的深层和广泛继承层次结构的模糊问题。 常见的ECS方法与面向数据的设计技术高度兼容，并经常与之结合。 一个组件的所有实例的数据通常一起存储在物理内存中，这使得在多个实体上操作的系统能够有效地访问内存。 (来源：维基百科) 游戏领域为什么需要ECS？ 总结起来大概是两个词：”瓶颈“和”契合“。 &emsp;&emsp;此处我们忽略一些ECS的其他特性，比如解耦、易扩展等，在其他设计模式下也能够实现，这不是ECS的显著特点和优势。同时也应该提到，ECS并不是万能的灵丹妙药， 并不能解决通用编程的所有","default_branch":null,"files":null,"tree":[],"storefront":"/r/zllangct","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/zllangct/ecs/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}