# Frostbite2D 一个现代化的跨平台 2D 游戏引擎,使用 C++17 开发。 ## 特性 - **跨平台支持** - Windows、Linux、macOS、Nintendo Switch - **现代渲染** - OpenGL 4.x 渲染器,支持批量渲染和自定义着色器 - **完整游戏框架** - 场景管理、Actor 系统、精灵动画 - **资源管理系统** - NPK 图片归档、PVF 脚本归档、LRU 缓存 - **音频系统** - SDL2_mixer,支持 MP3/OGG/WAV - **输入系统** - 键盘、鼠标、触摸、手柄完整支持 - **智能指针** - 自定义引用计数系统,避免内存泄漏 - **事件系统** - 支持捕获/冒泡、优先级、事件拦截 ## 构建 本项目使用 [XMake](https://xmake.io/) 作为构建系统。 ### 前置要求 - C++17 兼容编译器 - XMake - SDL2、SDL2_image、SDL2_mixer、GLM、Glad、zlib ### 基本构建 ```bash xmake build ``` ### 调试构建 ```bash xmake build -m debug ``` ### 发布构建 ```bash xmake build -m release ``` ### 平台特定构建 ```bash xmake build -p windows xmake build -p linux xmake build -p switch ``` ## 快速开始 ```cpp #include #include #include #include #include #include #include #include using namespace frostbite2D; int main(int argc, char** argv) { AppConfig config = AppConfig::createDefault(); config.windowConfig.width = 1280; config.windowConfig.height = 720; config.windowConfig.title = "My Game"; Application& app = Application::get(); if (!app.init(config)) { return -1; } Asset::get().setWorkingDirectory("assets"); NpkArchive::get().open("images.npk"); auto scene = MakePtr(); SceneManager::get().PushScene(scene); auto sprite = Sprite::createFromFile("player.png"); if (sprite) { sprite->SetPosition(100, 100); scene->AddActor(sprite); } app.run(); app.shutdown(); return 0; } ``` ## 模块概览 | 模块 | 描述 | |------|------| | `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 图形组件 │ │ ├── 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