本指南带你从零开始、循序渐进地掌握 Engine2D。每一课都是一个可独立编译运行的小程序,代码里写满了中文注释。建议按顺序阅读源码、编译、运行、再改一改看效果。
所有教程都位于
Examples/Learn/,构建后可执行文件在build/bin/下,名字形如Learn01_HelloWindow.exe。
Engine2D 采用组件式架构,三句话理解它:
- Engine(引擎) 是单例,负责初始化所有子系统并驱动主循环:
处理输入 → 更新(update) → 渲染(render),每帧循环一次。 - Scene(场景) 是 GameObject(游戏对象) 的容器;SceneManager 负责场景的创建与切换。
- GameObject 本身只是一个壳,真正的行为写在挂到它上面的 Component(组件) 里。
你最常做的事就是:写一个继承
Component的类,重写initialize / update / render, 然后gameObject->addComponent<你的组件>()。
一个最小程序长这样:
Engine& engine = Engine::getInstance();
engine.initialize("标题", 800, 600); // 1. 初始化
auto* scene = engine.getSceneManager()->createScene("Main");
engine.getSceneManager()->loadScene("Main"); // 2. 创建并加载场景
scene->createGameObject("Hi")->addComponent<MyComponent>(); // 3. 挂组件
engine.run(); // 4. 跑主循环- 世界坐标:
drawRect / drawCircle / drawLine使用世界坐标,Y 轴向上, 渲染时会自动翻转到屏幕。游戏内的实体(角色、子弹)通常用它。 - 屏幕坐标:
drawText / drawTextCentered使用屏幕坐标,左上角为原点、Y 向下, 适合画分数、菜单等 HUD。需要在屏幕坐标里画矩形(比如做 UI 背景)时, 可参考教程 06 里的fillScreenRect()辅助函数做一次换算。
| 课 | 目录 | 你将学到 |
|---|---|---|
| 01 | 01_HelloWindow |
程序骨架、主循环、第一个组件、画文字 |
| 02 | 02_DrawingShapes |
矩形/线段/圆的绘制,用 sin/cos 做动态画面 |
| 03 | 03_Input |
键盘三态(按下/按住/松开)、鼠标位置与点击 |
| 04 | 04_Physics |
刚体 Rigidbody、重力、读写速度、边界反弹 |
| 05 | 05_Animation |
用 deltaTime 做平滑动画、lerp 与缓动曲线 |
| 06 | 06_TextAndUI |
位图字体、坐标换算、手写一个可点击按钮 |
| 07 | 07_AudioAndScenes |
程序化音效(波形/滑音)、多场景切换 |
最小可运行程序。理解 initialize → createScene/loadScene → addComponent → run 的固定套路,
以及 Component::update(dt) 与 Component::render() 的分工。
渲染器的基础画笔。注意所有图形用世界坐标(Y 向上),文字用屏幕坐标(Y 向下)。
区分 isKeyPressed(仅按下那一帧)、isKeyHeld(按住期间每帧)、isKeyReleased(松开那一帧)。
移动用 Held,开关/切换用 Pressed。
给对象加 Rigidbody 后,物理世界会按设定的重力为它积分速度与位置。
本课把重力设为向下,并在组件里手动处理「撞墙反弹」(读速度→反向→乘弹性系数)。
动画的本质是「随时间改变属性」。用 deltaTime 累积时间保证不同帧率下表现一致;
lerp 做线性过渡,配合 easeInOut / easeOutBack / easeOutBounce 让运动更有生命力。
引擎自带 5×7 位图字体(无需任何字体文件):drawText / drawTextCentered / measureTextWidth。
本课用「矩形 + 文字 + 鼠标命中检测」从零做一个会悬停、可点击的按钮。
引擎用 SDL 核心音频实时合成音效,无需音频文件:playTone(频率,时长,音量,波形)、
playSweep(起,止,...)。同时演示用 loadScene 在「菜单」与「音板」两个场景间切换。
学完教程后,去读 Examples/ 下两个「麻雀虽小五脏俱全」的完整游戏,
它们演示了真实项目里的状态机、HUD、音效与重开流程:
- SnakeGame(贪吃蛇) —— 推荐首读。网格玩法 + 完整状态机(菜单/游戏/暂停/结束/重开)
- 计分与最高分 + 渐进加速 + 音效。结构清晰,是最好的「抄作业」模板。
- TankBattle(坦克大战) —— 更复杂:多波敌人、AI、可破坏砖墙、暂停与胜负流程。
其它示例:BounceArena(打砖块,演示引擎物理碰撞)、FallingBlocks(下落方块 + 重力)、
InputTest(输入测试)、SimpleGame(最简范例)。
mkdir -p build && cd build
cmake ..
cmake --build . # 或 Windows + mingw: mingw32-make
# 运行(可执行文件在 build/bin/)
./bin/Learn01_HelloWindow
./bin/SnakeGame祝学习愉快,开始动手改代码吧!🚀