一个现代化的、高性能的2D游戏引擎,使用C++17开发,采用组件式架构设计。
- 现代化C++: 使用C++17标准,支持智能指针、移动语义等现代特性
- 组件式架构: 游戏对象由多个组件组成,每个组件负责特定功能
- 高性能: 优化的渲染和物理系统,支持高效的游戏开发
- 完整的工具链: 包含日志系统、性能分析器、配置管理等工具
- 跨平台: 支持Windows、Linux、macOS
- 易于使用: 提供简单直观的API,降低游戏开发的学习曲线
- 模块化设计: 各系统相对独立,可以根据需要选择使用哪些功能
- 场景管理: 灵活的场景和游戏对象管理系统
- 图形渲染: 基于SDL2的高性能2D图形渲染
- 物理系统: 完整的物理模拟,包括刚体动力学和碰撞检测
- 输入处理: 键盘、鼠标和触摸输入处理
- 音频系统: 音效和音乐支持
- 资源管理: 高效的资源加载和管理
- 日志系统: 完整的日志记录和调试支持
- 性能分析: 内置性能分析工具
- 配置管理: 灵活的配置系统
- 编译器: C++17兼容的编译器 (GCC 7+, Clang 5+, MSVC 2017+)
- 构建系统: CMake 3.12+
- 依赖库: SDL2 及相关库 (SDL2_image, SDL2_ttf, SDL2_mixer)
- 内存: 至少 512MB RAM
- 存储: 至少 100MB 可用空间
-
安装必要的依赖:
- Visual Studio 2019或更高版本
- CMake
- SDL2 开发库
- SDL2_image
- SDL2_ttf
- SDL2_mixer
-
配置SDL2环境变量或在CMake配置中指定SDL2路径
-
创建构建目录并生成项目文件:
mkdir build cd build cmake .. -
打开生成的Visual Studio解决方案并构建项目
-
安装必要的依赖:
sudo apt-get install cmake libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsdl2-mixer-dev -
创建构建目录并构建项目:
mkdir build cd build cmake .. make
-
安装必要的依赖:
brew install cmake sdl2 sdl2_image sdl2_ttf sdl2_mixer -
创建构建目录并构建项目:
mkdir build cd build cmake .. make
Engine2D 的渲染以几何图元 + 内置位图字体为核心,开箱即用、无需任何外部 图片/字体/音频文件。下面是一个可直接运行的最小示例:
#include <Engine2D/Engine2D.h>
using namespace Engine2D;
class Hello : public Component {
public:
void initialize() override { m_input = Engine::getInstance().getInputManager(); }
void update(float dt) override {
m_t += dt;
if (m_input->isKeyPressed(SDLK_ESCAPE)) Engine::getInstance().setRunning(false);
}
void render() override {
auto* r = Engine::getInstance().getRenderer();
r->drawCircle(400, 300, 40 + 10 * std::sin(m_t * 3), Color(120, 220, 255), true);
r->drawTextCentered("HELLO ENGINE2D", 400, 120, Color::WHITE, 4);
}
private:
InputManager* m_input = nullptr; float m_t = 0;
};
int main() {
Engine& e = Engine::getInstance();
if (!e.initialize("My Game", 800, 600)) return 1;
e.getSceneManager()->createScene("Main");
e.getSceneManager()->loadScene("Main");
e.getSceneManager()->getCurrentScene()->createGameObject("Hi")->addComponent<Hello>();
e.run();
return 0;
}// 文字(屏幕坐标,左上角原点)
renderer->drawText("SCORE 1200", 16, 16, Color::WHITE, 3);
renderer->drawTextCentered("GAME OVER", 400, 280, Color::RED, 6);
// 音效:用 SDL 核心音频实时合成,支持 正弦/方波/三角/锯齿/噪声
audio->playTone(880.0f, 80, 0.5f, Waveform::SQUARE); // 单音
audio->playSweep(440.0f, 880.0f, 200, 0.5f, Waveform::SINE); // 滑音仓库内置一套渐进式学习教程和两个完整游戏,构建后位于 build/bin/:
学习教程(Examples/Learn/,详见 LEARNING.md):
| 课 | 主题 |
|---|---|
Learn01_HelloWindow |
程序骨架与主循环 |
Learn02_DrawingShapes |
图元绘制 |
Learn03_Input |
键盘 / 鼠标输入 |
Learn04_Physics |
刚体、重力与反弹 |
Learn05_Animation |
缓动与帧无关动画 |
Learn06_TextAndUI |
位图字体与按钮 |
Learn07_AudioAndScenes |
程序化音效与场景切换 |
完整游戏(Examples/):
SnakeGame—— 贪吃蛇,含菜单/暂停/计分/最高分/结算/音效,结构清晰,推荐首读。TankBattle—— 坦克大战,多波敌人 + AI + 可破坏砖墙 + 完整流程。BounceArena/FallingBlocks—— 演示引擎物理(碰撞、重力)。InputTest/SimpleGame—— 输入与最简范例。
项目包含完整的单元测试套件:
# 启用测试构建
cmake -DBUILD_TESTS=ON ..
# 运行测试
make test引擎经过优化,支持:
- 60+ FPS 稳定运行
- 1000+ 游戏对象同时渲染
- 高效的物理模拟
- 内存使用优化
欢迎贡献代码!请遵循以下步骤:
- Fork 项目
- 创建功能分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开 Pull Request
本项目采用MIT许可证。详情请参见LICENSE文件。