---
## 🌟 简介
**Easy2D v3.1.0** 是一个专为 C++ 设计的轻量级 2D 游戏引擎,采用全新架构设计,支持 Windows、Linux 和 macOS 三大平台。
> 💡 创建这个引擎的初衷是学习游戏引擎技术,并开发一些有趣的小游戏。Easy2D 提供了丰富的工具和轮子,让游戏开发变得简单而愉快。
### ✨ 核心特性
- **🎬 动画系统**:支持基于动作(Action)的补间动画和基于精灵图(Sprite Sheet)的帧动画。`AnimatedSprite` 提供完整的动画控制,包括播放、暂停、帧范围限制、动画字典管理等功能。
- **📜 脚本系统**:集成 Squirrel 脚本引擎,支持使用类 JavaScript 语法编写游戏逻辑。通过 `ScriptComponent` 将脚本附加到节点,实现数据驱动的游戏开发。提供完整的引擎 API 绑定,包括节点操作、输入处理、动画控制等。
- **🎮 跨平台**:一套代码,多平台运行。支持 Windows、Linux 和 macOS。
---
## 🗺️ 架构概览
```mermaid
mindmap
root((Easy2D v3.1.0 引擎架构))
核心系统
应用管理 Application
渲染后端 RenderBackend
窗口管理 Window
输入处理 Input
音频引擎 AudioEngine
资源管理 ResourceManager
事件系统 EventDispatcher
日志系统 Logger
场景管理
场景 Scene
场景管理器 SceneManager
过渡动画 Transition
空间索引 SpatialManager
四叉树 QuadTree
空间哈希 SpatialHash
节点系统
基础节点 Node
精灵 Sprite
文本 Text
形状 ShapeNode
摄像机 Camera
动画系统
动作系统 Action
位移动作 MoveBy/MoveTo
缩放动作 ScaleBy/ScaleTo
旋转动作 RotateBy/RotateTo
淡入淡出 FadeIn/FadeOut
跳跃动作 JumpBy/JumpTo
组合动作 Sequence/Spawn/Repeat
缓动函数 Ease
精灵动画系统
动画精灵 AnimatedSprite
动画片段 AnimationClip
动画控制器 AnimationController
精灵帧 SpriteFrame
脚本系统
Squirrel 脚本引擎 ScriptEngine
VM 虚拟机管理
脚本加载与执行
错误处理与调试
脚本组件 ScriptComponent
生命周期回调 onEnter/onUpdate/onExit
节点访问与操作
脚本绑定 API
节点绑定 Node/Sprite/AnimatedSprite
输入绑定 Input/Key
数学绑定 Vec2/Rect/Color
事件系统
事件队列 EventQueue
事件分发 EventDispatcher
输入码 InputCodes
UI 系统
基础控件 Widget
按钮 Button
工具库
音频播放 Sound
数据持久化 Data
随机数 Random
定时器 Timer
字体 FontAtlas
数学库
向量 Vec2/Vec3
矩形 Rect
大小 Size
颜色 Color
矩阵 glm::mat4
```
### 🎬 动画系统详解
Easy2D 提供两套动画系统,满足不同场景需求:
**1. 动作系统(Action)**
- 基于补间动画的节点变换系统
- 支持位移、缩放、旋转、淡入淡出等基础动作
- 支持组合动作(Sequence/Spawn/Repeat)和缓动函数
- 适用于 UI 动画、特效动画等场景
**2. 精灵动画系统(AnimatedSprite)**
- 基于精灵图的帧动画系统
- 支持从网格创建动画(`createFromGrid`)
- 支持帧范围限制,实现多方向动画管理
- 支持动画字典,动态切换不同动画
- 提供完整的播放控制(play/pause/stop/reset)
- 适用于角色行走、攻击等游戏动画
### 📜 脚本系统详解
Easy2D v3.1.0 引入 Squirrel 脚本引擎,支持数据驱动的游戏开发:
**1. 脚本引擎(ScriptEngine)**
- 基于 Squirrel 3.2 稳定版
- 类 JavaScript 语法,易于学习
- 支持面向对象编程
- 提供完整的错误处理和调试信息
**2. 脚本组件(ScriptComponent)**
- 将脚本附加到场景节点
- 生命周期回调:`onEnter`、`onUpdate`、`onExit`
- 通过 `node` 参数访问和操附加的节点
- 支持自定义属性和方法
**3. 脚本绑定 API**
- **节点操作**:`Node`、`Sprite`、`AnimatedSprite` 等
- **输入处理**:`Input.isKeyDown()`、`Input.isKeyPressed()`
- **数学类型**:`Vec2`、`Rect`、`Color` 等
- **全局函数**:`log()` 日志输出
**示例脚本结构**:
```nut
return {
function onEnter(node) {
// 初始化:创建精灵、设置位置等
}
function onUpdate(node, dt) {
// 每帧更新:处理输入、更新状态等
}
function onExit(node) {
// 清理:释放资源等
}
}
```
---
## ✨ 功能特性
### 🎬 核心功能
| 功能模块 | 描述 | 状态 |
|:--------:|:-----|:----:|
| 🎭 场景管理 | 灵活的场景切换与管理 | ✅ |
| 🎨 过渡动画 | 淡入淡出、移动、盒子等多种过渡效果 | ✅ |
| 🎬 动画系统 | 丰富的动作和帧动画支持 | ✅ |
| 📜 脚本系统 | Squirrel 脚本支持,可编写游戏逻辑 | ✅ |
| 🔘 GUI 系统 | 简单易用的按钮组件 | ✅ |
| 🎵 音频支持 | 基于 miniaudio 的音频播放 | ✅ |
| 💾 数据持久化 | 游戏数据保存与读取 | ✅ |
| 📝 日志系统 | 基于 spdlog 的高性能日志 | ✅ |
| 🌐 跨平台 | 支持 Windows/Linux/macOS | ✅ |
| 🚀 OpenGL 渲染 | 现代 OpenGL 渲染后端 | ✅ |
| 🎯 空间索引 | 四叉树/空间哈希碰撞检测 | ✅ |
### 🎯 动作系统详解
```mermaid
flowchart TB
subgraph 基础动作
A[Action 基类]
B[IntervalAction 持续动作]
C[InstantAction 瞬时动作]
end
subgraph 变换动作
D[MoveBy/MoveTo 位移]
E[ScaleBy/ScaleTo 缩放]
F[RotateBy/RotateTo 旋转]
G[FadeIn/FadeOut 淡入淡出]
H[JumpBy/JumpTo 跳跃]
end
subgraph 复合动作
I[Sequence 顺序执行]
J[Spawn 同步执行]
K[Repeat 循环执行]
L[Delay 延时]
M[CallFunc 回调]
end
subgraph 缓动函数
N[EaseIn/EaseOut]
O[EaseInOut]
P[EaseBack/EaseBounce]
Q[EaseElastic]
end
A --> B & C
B --> D & E & F & G & H
A --> I & J & K & L & M
B --> N & O & P & Q
```
### 🖼️ 渲染流程
```mermaid
flowchart LR
A[Application] --> B[Update Scene]
B --> C[Collect RenderCommands]
C --> D[OpenGL Backend]
D --> E[GPU Rendering]
style A fill:#ff6b6b,color:#fff
style E fill:#4ecdc4,color:#fff
```
---
## 🚀 快速开始
### 环境要求
| 组件 | 最低版本 | 推荐版本 |
|:----:|:--------:|:--------:|
| Windows | Windows 7 | Windows 10/11 |
| Linux | Ubuntu 18.04 | Ubuntu 22.04 |
| macOS | 10.14 | 最新版 |
| C++ 标准 | C++17 | C++17 |
| OpenGL | 3.3 | 4.0+ |
### 使用 xmake 构建(推荐)
#### 步骤 1: 安装 xmake
```bash
# Windows (PowerShell)
Invoke-Expression (Invoke-Webrequest 'https://xmake.io/psget.text' -UseBasicParsing).Content
# Linux/macOS
curl -fsSL https://xmake.io/shget.text | bash
```
#### 步骤 2: 克隆并构建
```bash
# 克隆仓库
git clone https://github.com/nomango/easy2d.git
cd easy2d
# 配置并构建
xmake f --mode=release
xmake
# 运行示例
xmake run hello_world
xmake run push_box
```
#### 平台特定配置
```bash
# Windows (MSVC - 默认)
xmake f --mode=release
# Windows (MinGW)
xmake f --toolchain=mingw --mode=release
# Linux
xmake f --mode=release
# macOS
xmake f --mode=release
# 调试模式
xmake f --mode=debug
```
---
## 📝 Hello World 示例
```cpp
#include