From 51be8a6128e93abbf35c40e4e23d02f0787f498c Mon Sep 17 00:00:00 2001 From: Lenheart <947330670@qq.com> Date: Sat, 28 Mar 2026 04:42:54 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=20README=20=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 完善特性描述,添加音频系统、输入系统等新功能说明 - 更新依赖列表,添加 SDL2_mixer 和 zlib - 优化示例代码,展示资源管理和 Actor 系统 - 添加模块概览表格和技术亮点章节 - 重构项目结构说明,反映最新代码组织 --- README.md | 84 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 60 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index ede9519..abc8c04 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,17 @@ # Frostbite2D -一个现代化的跨平台2D游戏引擎,使用C++17开发。 +一个现代化的跨平台 2D 游戏引擎,使用 C++17 开发。 ## 特性 - **跨平台支持** - Windows、Linux、macOS、Nintendo Switch -- **现代渲染** - OpenGL渲染器,支持批量渲染和着色器管理 -- **完整的游戏开发框架** - 场景管理、精灵系统、资源管理 -- **高效的工具集** - 二进制读取器、PVF归档格式、脚本解析器 -- **智能指针系统** - 引用计数指针,避免内存泄漏 +- **现代渲染** - OpenGL 4.x 渲染器,支持批量渲染和自定义着色器 +- **完整游戏框架** - 场景管理、Actor 系统、精灵动画 +- **资源管理系统** - NPK 图片归档、PVF 脚本归档、LRU 缓存 +- **音频系统** - SDL2_mixer,支持 MP3/OGG/WAV +- **输入系统** - 键盘、鼠标、触摸、手柄完整支持 +- **智能指针** - 自定义引用计数系统,避免内存泄漏 +- **事件系统** - 支持捕获/冒泡、优先级、事件拦截 ## 构建 @@ -18,7 +21,7 @@ - C++17 兼容编译器 - XMake -- SDL2、SDL2_image、GLM、Glad +- SDL2、SDL2_image、SDL2_mixer、GLM、Glad、zlib ### 基本构建 @@ -51,13 +54,16 @@ xmake build -p switch ```cpp #include #include +#include #include #include #include +#include +#include using namespace frostbite2D; -int main(int argc, char **argv) { +int main(int argc, char** argv) { AppConfig config = AppConfig::createDefault(); config.windowConfig.width = 1280; config.windowConfig.height = 720; @@ -68,10 +74,13 @@ int main(int argc, char **argv) { return -1; } + Asset::get().setWorkingDirectory("assets"); + NpkArchive::get().open("images.npk"); + auto scene = MakePtr(); SceneManager::get().PushScene(scene); - auto sprite = Sprite::createFromFile("assets/player.png"); + auto sprite = Sprite::createFromFile("player.png"); if (sprite) { sprite->SetPosition(100, 100); scene->AddActor(sprite); @@ -84,28 +93,55 @@ int main(int argc, char **argv) { } ``` +## 模块概览 + +| 模块 | 描述 | +|------|------| +| `core` | Application、Window 核心类 | +| `2d` | Actor、Sprite 2D 组件 | +| `graphics` | Renderer、Batch、Camera、Texture、Shader | +| `scene` | Scene、SceneManager 场景管理 | +| `resource` | Asset、NpkArchive、PvfArchive 资源管理 | +| `audio` | AudioSystem、Music、Sound 音频系统 | +| `animation` | Animation、AnimationData 动画系统 | +| `event` | 事件系统(窗口、键盘、鼠标、触摸、手柄) | +| `base` | RefObject、RefPtr 智能指针 | +| `types` | Vec2、Vec3、Rect、Color 数学类型 | + ## 项目结构 ``` Frostbite2D/ -├── Frostbite2D/ # 引擎核心代码 -│ ├── include/ # 公共头文件 -│ │ └── frostbite2D/ -│ │ ├── 2d/ # 2D图形组件 -│ │ ├── core/ # 核心引擎类 -│ │ ├── graphics/ # 图形渲染系统 -│ │ ├── scene/ # 场景管理 -│ │ ├── types/ # 类型定义 -│ │ └── utils/ # 工具类 -│ └── src/ # 实现文件 -├── Game/ # 游戏应用示例 -│ ├── assets/ # 游戏资源 -│ ├── include/ # 游戏头文件 -│ └── src/ # 游戏源文件 -├── platform/ # 平台配置 -└── xmake.lua # XMake构建配置 +├── Frostbite2D/ # 引擎核心 +│ ├── include/frostbite2D/ # 公共头文件 +│ │ ├── 2d/ # 2D 图形组件 +│ │ ├── animation/ # 动画系统 +│ │ ├── audio/ # 音频系统 +│ │ ├── base/ # 基础类型(智能指针) +│ │ ├── core/ # 核心引擎类 +│ │ ├── event/ # 事件系统 +│ │ ├── graphics/ # 图形渲染系统 +│ │ ├── resource/ # 资源管理系统 +│ │ ├── scene/ # 场景管理 +│ │ ├── types/ # 类型定义 +│ │ └── utils/ # 工具类 +│ └── src/ # 实现文件 +├── Game/ # 游戏示例 +│ ├── assets/ # 游戏资源 +│ └── src/ # 游戏源文件 +├── platform/ # 平台配置 +└── xmake.lua # 构建配置 ``` +## 技术亮点 + +- **批量渲染** - 2048 四边形批次优化 +- **LRU 缓存** - NPK/SoundPack 资源缓存(默认 512MB) +- **侵入式链表** - 高性能 Actor 子对象管理 +- **变换系统** - 局部/世界变换矩阵自动更新 +- **事件系统** - 支持捕获/冒泡、优先级、拦截 +- **资源归档** - 支持 NPK(图片/音频)、PVF(脚本) + ## 许可证 MIT License