0

0

C++怎么实现一个简单的ECS架构_C++游戏开发中的实体组件系统模式入门

下次还敢

下次还敢

发布时间:2025-11-21 20:02:02

|

821人浏览过

|

来源于php中文网

原创

c++怎么实现一个简单的ecs架构_c++游戏开发中的实体组件系统模式入门

在C++游戏开发中,ECS(Entity-Component-System)是一种高效、灵活的架构模式,适合处理大量动态对象。它把数据和行为分离,提升缓存友好性和代码可维护性。下面是一个简单的ECS实现思路,帮助你快速入门。

什么是ECS?

ECS由三部分组成:

  • Entity(实体):只是一个唯一ID,代表游戏中的一个“东西”,比如玩家、敌人或子弹。
  • Component(组件):纯数据结构,描述实体的某方面属性,比如位置、速度、生命值。
  • System(系统):处理具有特定组件组合的实体,执行逻辑,比如移动、渲染、碰撞检测。

这种设计避免了复杂的继承树,更利于性能优化和模块化开发。

基本结构设计

我们用C++实现一个极简版本,核心是管理组件存储和系统更新。

立即学习C++免费学习笔记(深入)”;

1. 定义组件

组件是POD(Plain Old Data)结构:

struct Position {
    float x, y;
};

struct Velocity { float dx, dy; };

struct Health { int value; };

2. 实体用ID表示

实体不需要类,只需一个类型别名:

using Entity = uint32_t;

3. 组件存储

神采PromeAI
神采PromeAI

将涂鸦和照片转化为插画,将线稿转化为完整的上色稿。

下载

使用稀疏数组或std::unordered_map按组件类型存储数据:

template
class ComponentArray {
    std::unordered_map m_data;
public:
    void Add(Entity entity, T component) {
        m_data[entity] = component;
    }
void Remove(Entity entity) {
    m_data.erase(entity);
}

T& Get(Entity entity) {
    return m_data[entity];
}

bool Has(Entity entity) {
    return m_data.find(entity) != m_data.end();
}

};

4. 管理所有组件

创建一个中央注册器:

class ComponentManager {
    std::unordered_map> m_components{};

public: template void Register() { m_components[typeid(T).hash_code()] = std::make_shared>(); }

template
ComponentArray& GetArray() {
    auto it = m_components.find(typeid(T).hash_code());
    return *static_cast*>(it->second.get());
}

};

实现简单系统

系统定期遍历具有特定组件的实体:

class MovementSystem {
public:
    void Update(float dt, ComponentManager& cm) {
        auto& positions = cm.GetArray();
        auto& velocities = cm.GetArray();
    for (auto& [entity, pos] : positions.m_data) {
        if (velocities.Has(entity)) {
            auto& vel = velocities.Get(entity);
            pos.x += vel.dx * dt;
            pos.y += vel.dy * dt;
        }
    }
}

};

这个系统只关心有PositionVelocity的实体,自动完成移动计算。

使用示例

组装并运行:

int main() {
    ComponentManager cm;
    cm.Register();
    cm.Register();
// 创建两个实体
Entity player = 1;
cm.GetArray().Add(player, {0.0f, 0.0f});
cm.GetArray().Add(player, {1.0f, 0.5f});

Entity enemy = 2;
cm.GetArray().Add(enemy, {5.0f, 5.0f});

MovementSystem moveSys;
moveSys.Update(0.1f, cm);  // 更新100ms

auto& pos = cm.GetArray().Get(player);
printf("Player at (%.2f, %.2f)\n", pos.x, pos.y);  // 输出: (0.10, 0.05)

return 0;

}

这个例子展示了如何添加实体、赋组件,并通过系统驱动行为。

基本上就这些。不复杂但容易忽略的是组件存储的性能优化——实际项目中会用连续内存块(如std::vector + 索引映射)来提高遍历效率。不过对于入门理解,unordered_map已经足够清晰。

相关专题

更多
treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

533

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

17

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

13

2026.01.06

CSS position定位有几种方式
CSS position定位有几种方式

有4种,分别是静态定位、相对定位、绝对定位和固定定位。更多关于CSS position定位有几种方式的内容,可以访问下面的文章。

81

2023.11.23

PHP 高并发与性能优化
PHP 高并发与性能优化

本专题聚焦 PHP 在高并发场景下的性能优化与系统调优,内容涵盖 Nginx 与 PHP-FPM 优化、Opcode 缓存、Redis/Memcached 应用、异步任务队列、数据库优化、代码性能分析与瓶颈排查。通过实战案例(如高并发接口优化、缓存系统设计、秒杀活动实现),帮助学习者掌握 构建高性能PHP后端系统的核心能力。

98

2025.10.16

PHP 数据库操作与性能优化
PHP 数据库操作与性能优化

本专题聚焦于PHP在数据库开发中的核心应用,详细讲解PDO与MySQLi的使用方法、预处理语句、事务控制与安全防注入策略。同时深入分析SQL查询优化、索引设计、慢查询排查等性能提升手段。通过实战案例帮助开发者构建高效、安全、可扩展的PHP数据库应用系统。

72

2025.11.13

JavaScript 性能优化与前端调优
JavaScript 性能优化与前端调优

本专题系统讲解 JavaScript 性能优化的核心技术,涵盖页面加载优化、异步编程、内存管理、事件代理、代码分割、懒加载、浏览器缓存机制等。通过多个实际项目示例,帮助开发者掌握 如何通过前端调优提升网站性能,减少加载时间,提高用户体验与页面响应速度。

25

2025.12.30

Java 项目构建与依赖管理(Maven / Gradle)
Java 项目构建与依赖管理(Maven / Gradle)

本专题系统讲解 Java 项目构建与依赖管理的完整体系,重点覆盖 Maven 与 Gradle 的核心概念、项目生命周期、依赖冲突解决、多模块项目管理、构建加速与版本发布规范。通过真实项目结构示例,帮助学习者掌握 从零搭建、维护到发布 Java 工程的标准化流程,提升在实际团队开发中的工程能力与协作效率。

9

2026.01.12

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

101

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号