chore: 初始化项目骨架与学习开发计划
- 搭建 Cargo workspace:engine 库 + sandbox 可执行示例,构建/运行通过 - 加入分阶段学习开发计划(Markdown / CSV / xlsx) - 配置 .gitignore、README、MIT 许可信息 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
commit
83477a7f64
24
.gitignore
vendored
Normal file
24
.gitignore
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# Rust / Cargo 构建产物
|
||||||
|
/target/
|
||||||
|
**/target/
|
||||||
|
|
||||||
|
# Cargo.lock:库不提交,但本项目含可执行程序,建议提交以锁定依赖版本(保留)
|
||||||
|
# 若日后纯做库可改为忽略
|
||||||
|
|
||||||
|
# 编辑器 / IDE
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
*.iml
|
||||||
|
|
||||||
|
# 操作系统
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
desktop.ini
|
||||||
|
|
||||||
|
# Office 临时/锁文件(Excel/Word 打开文档时生成)
|
||||||
|
~$*
|
||||||
|
|
||||||
|
# 调试与临时文件
|
||||||
|
*.pdb
|
||||||
|
*.log
|
||||||
|
*~
|
||||||
14
Cargo.lock
generated
Normal file
14
Cargo.lock
generated
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 4
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "engine"
|
||||||
|
version = "0.0.1"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "sandbox"
|
||||||
|
version = "0.0.1"
|
||||||
|
dependencies = [
|
||||||
|
"engine",
|
||||||
|
]
|
||||||
18
Cargo.toml
Normal file
18
Cargo.toml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Cargo 工作空间(workspace) —— 把"引擎库"和"测试用沙盒"放在一起统一管理
|
||||||
|
[workspace]
|
||||||
|
resolver = "2"
|
||||||
|
members = [
|
||||||
|
"crates/engine", # 引擎本体(库 crate),你要造的东西在这里
|
||||||
|
"examples/sandbox", # 沙盒(可执行程序),用来调用并测试引擎
|
||||||
|
]
|
||||||
|
|
||||||
|
# 所有成员共享的包级元信息,避免重复填写
|
||||||
|
[workspace.package]
|
||||||
|
edition = "2021"
|
||||||
|
license = "MIT"
|
||||||
|
authors = ["cc"]
|
||||||
|
repository = "ssh://gitea@8.130.143.54:2222/cc/2DGameEngineByRust.git"
|
||||||
|
|
||||||
|
# 在这里统一管理依赖版本,成员 crate 用 `xxx.workspace = true` 引用
|
||||||
|
# 现阶段保持空白,按学习计划逐阶段添加(winit / wgpu / glam ...)
|
||||||
|
[workspace.dependencies]
|
||||||
53
README.md
Normal file
53
README.md
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
# 2DGameEngineByRust
|
||||||
|
|
||||||
|
用 Rust 从零手写的 2D 游戏引擎 —— 一个零基础学习者的引擎养成项目。
|
||||||
|
|
||||||
|
## 这是什么
|
||||||
|
|
||||||
|
我在零编程/零引擎经验的基础上,通过亲手造一个 2D 引擎来系统巩固游戏引擎知识,
|
||||||
|
之后会用它做一款小游戏。完整路线见:
|
||||||
|
|
||||||
|
- 📖 [引擎学习开发计划.md](引擎学习开发计划.md) —— 详细的分阶段学习与开发计划
|
||||||
|
- 📊 [引擎学习开发计划.csv](引擎学习开发计划.csv) —— 任务清单(可当进度看板)
|
||||||
|
|
||||||
|
## 项目结构
|
||||||
|
|
||||||
|
```
|
||||||
|
.
|
||||||
|
├── Cargo.toml # 工作空间(workspace)配置
|
||||||
|
├── crates/
|
||||||
|
│ └── engine/ # 引擎本体(库 crate)—— 要造的东西在这里
|
||||||
|
├── examples/
|
||||||
|
│ └── sandbox/ # 沙盒(可执行程序)—— 调用并测试引擎
|
||||||
|
├── 引擎学习开发计划.md
|
||||||
|
└── 引擎学习开发计划.csv
|
||||||
|
```
|
||||||
|
|
||||||
|
## 快速开始
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 构建全部
|
||||||
|
cargo build
|
||||||
|
|
||||||
|
# 运行沙盒(会打印引擎问候语,验证骨架可用)
|
||||||
|
cargo run -p sandbox
|
||||||
|
|
||||||
|
# 跑测试
|
||||||
|
cargo test
|
||||||
|
```
|
||||||
|
|
||||||
|
## 进度
|
||||||
|
|
||||||
|
- [x] 阶段 0 之前:项目骨架搭建完成
|
||||||
|
- [ ] 阶段 0:地基(Rust 语言 / 数学 / 图形学认知)
|
||||||
|
- [ ] 阶段 1:工具链与环境
|
||||||
|
- [ ] 阶段 2:窗口与渲染入门
|
||||||
|
- [ ] 阶段 3:自己的 2D 渲染器
|
||||||
|
- [ ] 阶段 4:引擎核心架构
|
||||||
|
- [ ] 阶段 5:引擎子系统
|
||||||
|
- [ ] 阶段 6:编辑器与工具链
|
||||||
|
- [ ] 阶段 7:用引擎做一款游戏
|
||||||
|
|
||||||
|
## 许可证
|
||||||
|
|
||||||
|
MIT
|
||||||
17
crates/engine/Cargo.toml
Normal file
17
crates/engine/Cargo.toml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
[package]
|
||||||
|
name = "engine"
|
||||||
|
version = "0.0.1"
|
||||||
|
description = "一个从零手写的 2D 游戏引擎(学习用)"
|
||||||
|
edition.workspace = true
|
||||||
|
license.workspace = true
|
||||||
|
authors.workspace = true
|
||||||
|
repository.workspace = true
|
||||||
|
|
||||||
|
# 这是一个库 crate:引擎的所有功能都在这里实现,供 sandbox 或将来的游戏调用
|
||||||
|
[lib]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
# 现阶段无依赖。按 引擎学习开发计划 逐步添加,例如:
|
||||||
|
# winit = "0.30" # 阶段 2.B 窗口
|
||||||
|
# wgpu = "23" # 阶段 2.B GPU 渲染
|
||||||
|
# glam = "0.29" # 阶段 4.2 数学库
|
||||||
40
crates/engine/src/lib.rs
Normal file
40
crates/engine/src/lib.rs
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
//! # engine —— 一个从零手写的 2D 游戏引擎
|
||||||
|
//!
|
||||||
|
//! 这是引擎的入口。现在它几乎是空的,这很正常——
|
||||||
|
//! 你会按照《引擎学习开发计划》一个阶段一个阶段地把它填满。
|
||||||
|
//!
|
||||||
|
//! 规划中的模块(随学习进度逐步取消注释并实现):
|
||||||
|
//! - `app` 应用与游戏主循环 (计划 阶段 4.1)
|
||||||
|
//! - `render` 2D 渲染器 (计划 阶段 3)
|
||||||
|
//! - `math` 数学类型封装 (计划 阶段 4.2)
|
||||||
|
//! - `ecs` 实体-组件-系统 (计划 阶段 4.5)
|
||||||
|
//! - `input` 输入系统 (计划 阶段 5.1)
|
||||||
|
//! - `audio` 音频系统 (计划 阶段 5.2)
|
||||||
|
//! - `physics` 2D 物理与碰撞 (计划 阶段 5.3)
|
||||||
|
//!
|
||||||
|
//! 例如将来会这样写:
|
||||||
|
//! ```ignore
|
||||||
|
//! pub mod app;
|
||||||
|
//! pub mod render;
|
||||||
|
//! pub mod math;
|
||||||
|
//! ```
|
||||||
|
|
||||||
|
/// 返回引擎版本号。这是第一个能跑通的功能,用来验证项目骨架可用。
|
||||||
|
pub fn version() -> &'static str {
|
||||||
|
env!("CARGO_PKG_VERSION")
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 占位的问候函数,sandbox 会调用它,证明"库 → 可执行程序"的调用链通了。
|
||||||
|
pub fn greeting() -> String {
|
||||||
|
format!("2D 引擎已就绪 (v{}),开始你的阶段 0 吧!", version())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn version_not_empty() {
|
||||||
|
assert!(!version().is_empty());
|
||||||
|
}
|
||||||
|
}
|
||||||
11
examples/sandbox/Cargo.toml
Normal file
11
examples/sandbox/Cargo.toml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[package]
|
||||||
|
name = "sandbox"
|
||||||
|
version = "0.0.1"
|
||||||
|
description = "测试引擎用的沙盒程序"
|
||||||
|
edition.workspace = true
|
||||||
|
license.workspace = true
|
||||||
|
authors.workspace = true
|
||||||
|
|
||||||
|
# 这是一个可执行程序:它依赖 engine 库,用来试验和验证引擎功能
|
||||||
|
[dependencies]
|
||||||
|
engine = { path = "../../crates/engine" }
|
||||||
8
examples/sandbox/src/main.rs
Normal file
8
examples/sandbox/src/main.rs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
//! 沙盒程序:调用 engine 库,验证项目骨架是否能正常构建运行。
|
||||||
|
//!
|
||||||
|
//! 随着引擎长大,这里会逐步变成"创建窗口 → 启动游戏循环 → 渲染精灵"。
|
||||||
|
//! 现在它只做一件事:打印引擎的问候语。
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
println!("{}", engine::greeting());
|
||||||
|
}
|
||||||
37
引擎学习开发计划.csv
Normal file
37
引擎学习开发计划.csv
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
阶段,序号,任务/知识点,类型,是否有教程,推荐教程(中文优先),链接,产出/备注
|
||||||
|
阶段0 地基,0.1,Rust语言入门(所有权/借用/trait/泛型/错误处理),语言,✅有中文教程,Rust程序设计语言中文版 / Rust语言圣经,https://kaisery.github.io/trpl-zh-cn/ ; https://course.rs/,能独立写带结构体枚举trait的小程序
|
||||||
|
阶段0 地基,0.2,数据结构与基本算法,理论,✅/🔧,Rust语言圣经"手把手实现链表"+通用数据结构课,https://course.rs/,理解ECS用连续数组为何更快
|
||||||
|
阶段0 地基,0.3,游戏数学:线性代数(向量/矩阵/变换/正交投影),理论,✅有中文教程,GAMES101前几讲(线代复习+变换),https://www.bilibili.com/video/BV1X7411F744/,能手算旋转+平移的矩阵
|
||||||
|
阶段0 地基,0.4,计算机图形学基础(光栅化/帧缓冲/着色器/管线),理论,✅有中文教程,GAMES101(重点光栅化与变换),https://www.bilibili.com/video/BV1X7411F744/,能说清图片如何显示到屏幕
|
||||||
|
阶段0 地基,0.5,引擎宏观认知+游戏设计模式,理论,🔧有教程需改写,游戏编程模式中文版 + The Cherno第1集,https://gpp.tkchu.me/ ; https://www.bilibili.com/video/BV14v411h7Hu/,画出引擎模块草图
|
||||||
|
阶段0 地基,0.6,Git版本控制,工具,✅有中文教程,廖雪峰Git教程,https://liaoxuefeng.com/books/git/introduction/index.html,项目托管到GitHub
|
||||||
|
阶段1 工具链,1.1,安装Rust工具链(rustup/cargo),工具,✅有中文教程,TRPL中文版入门指南,https://kaisery.github.io/trpl-zh-cn/ch01-00-getting-started.html,cargo run跑通HelloWorld
|
||||||
|
阶段1 工具链,1.2,配置VS Code + rust-analyzer + 调试器,工具,✅有中文教程,B站搜"VS Code Rust 环境配置",https://rust-analyzer.github.io/,代码有智能提示和实时报错
|
||||||
|
阶段1 工具链,1.3,理解crate生态(crates.io/docs.rs/关键库定位),工具,✅有中文教程,crates.io / docs.rs,https://crates.io ; https://docs.rs,能自查一个库怎么用
|
||||||
|
阶段2 渲染入门,2.A,用macroquad做小游戏建立手感(贪吃蛇/打砖块),代码,🔧有教程需改写,Macroquad官方书(英文,代码极短),https://mq.agical.se/ ; https://github.com/not-fl3/macroquad,做出一个能玩的贪吃蛇
|
||||||
|
阶段2 渲染入门,2.B,winit开窗口 + wgpu初始化 + 第一个三角形,代码,✅有中文教程,学习wgpu中文版,https://jinleili.github.io/learn-wgpu-zh/,窗口里出现彩色三角形
|
||||||
|
阶段3 2D渲染器,3.1,渲染管线/WGSL着色器/顶点索引缓冲,代码,✅有中文教程,学习wgpu中文版"管线/缓冲"章,https://jinleili.github.io/learn-wgpu-zh/,理解着色器与缓冲
|
||||||
|
阶段3 2D渲染器,3.2,纹理加载(image库)与精灵Sprite渲染,代码,✅有中文教程,学习wgpu中文版"纹理与绑定组"章,https://jinleili.github.io/learn-wgpu-zh/,屏幕显示一张图片
|
||||||
|
阶段3 2D渲染器,3.3,2D正交摄像机与世界/屏幕坐标转换,代码,✅有中文教程,学习wgpu中文版"Uniform与摄像机"章(简化为正交),https://jinleili.github.io/learn-wgpu-zh/,能移动缩放视角
|
||||||
|
阶段3 2D渲染器,3.4,批处理渲染Batch Rendering(2D性能关键),代码,🔧有教程需改写,The Cherno "2D Batch Rendering"系列(C++),https://www.bilibili.com/video/BV14v411h7Hu/,流畅画上千精灵
|
||||||
|
阶段3 2D渲染器,3.5,文本渲染(字体图集/SDF),代码,🔧有教程需改写,glyphon/wgpu_text库示例 + 位图字体原理,https://docs.rs/glyphon/,屏幕显示分数与调试信息
|
||||||
|
阶段4 核心架构,4.1,游戏主循环(固定时间步长),代码,✅有中文教程,游戏编程模式"游戏循环"章,https://gpp.tkchu.me/game-loop.html,物理在不同帧率表现一致
|
||||||
|
阶段4 核心架构,4.2,集成数学库glam,代码,✅有中文教程,glam文档(概念已掌握),https://docs.rs/glam/,引擎统一Vec2/Mat3类型
|
||||||
|
阶段4 核心架构,4.3,日志系统(log/tracing分级日志),代码,✅有中文教程,log/env_logger库README + Cherno Logging集,https://docs.rs/log/,能打印分级调试信息
|
||||||
|
阶段4 核心架构,4.4,事件系统(观察者/事件分发),代码,🔧有教程需改写,The Cherno事件系统系列 + 游戏编程模式观察者章,https://gpp.tkchu.me/observer.html,各系统能订阅处理事件
|
||||||
|
阶段4 核心架构,4.5,ECS实体组件系统(先用hecs/bevy_ecs再考虑自造),架构,✅/⚠️,Bevy中文教程/Cheatbook + 游戏编程模式组件章,https://yiviv.com/bevy-cheatbook/ ; https://bevyengine-cn.github.io/learn/book_cn/getting-started/ecs/,能创建实体挂组件写系统
|
||||||
|
阶段4 核心架构,4.6,资源管理器(纹理/音频/字体缓存+句柄),架构,⚠️无现成教程,参考Bevy Assets设计自行实现,https://bevy.org/,assets.load接口
|
||||||
|
阶段5 子系统,5.1,输入系统(键鼠/手柄封装+按键映射),代码,🔧有教程需改写,winit输入文档 + gilrs手柄库,https://docs.rs/gilrs/,input.is_pressed接口
|
||||||
|
阶段5 子系统,5.2,音频系统(音效/BGM/音量,kira或rodio),代码,✅/🔧,kira/rodio库示例 + B站"Rust音频",https://docs.rs/kira/,游戏能放音效和BGM
|
||||||
|
阶段5 子系统,5.3,2D物理与碰撞(AABB/圆/响应,或集成rapier2d),代码,🔧/⚠️,B站"AABB/SAT碰撞" + Randy Gaul物理教程 + rapier2d,https://rapier.rs/,角色能站平台被墙挡
|
||||||
|
阶段5 子系统,5.4,精灵动画系统(序列帧/图集/动画状态机),代码,⚠️无现成教程,状态机参考游戏编程模式"状态"章自行实现,https://gpp.tkchu.me/state.html,角色播放走跳待机动画
|
||||||
|
阶段5 子系统,5.5,粒子系统(发射器/生命周期/批量渲染),代码,🔧有教程需改写,The Cherno "Particle System"集(C++),https://www.bilibili.com/video/BV14v411h7Hu/,爆炸火焰等特效
|
||||||
|
阶段5 子系统,5.6,场景管理与序列化(serde+ron/json),代码,✅/⚠️,B站/掘金"Rust serde" + 自行设计场景,https://serde.rs/,关卡能存文件再读回
|
||||||
|
阶段5 子系统,5.7,游戏内UI系统(集成egui),代码,✅有中文教程,egui官方示例 + B站"Rust egui教程",https://github.com/emilk/egui,主菜单/暂停界面/HUD
|
||||||
|
阶段6 编辑器,6.1,集成egui编辑器面板(实体列表/属性Inspector),工具,✅有中文教程,egui文档 + The Cherno Editor系列建立设计观,https://github.com/emilk/egui,编辑器里选中实体改属性
|
||||||
|
阶段6 编辑器,6.2,资源热重载(notify监听文件变化),工具,⚠️无现成教程,notify库README自行实现,https://docs.rs/notify/,改图不用重启程序
|
||||||
|
阶段6 编辑器,6.3,关卡/地图编辑(自做或对接Tiled),工具,🔧有教程需改写,Tiled官方(有中文) + tiled rust库,https://www.mapeditor.org/ ; https://docs.rs/tiled/,用编辑器拼一张关卡
|
||||||
|
阶段7 做游戏,7.1,选题与游戏设计(小而完整),设计,✅有中文教程,indienova独立游戏社区 + B站游戏设计入门,https://indienova.com/,一页纸设计文档
|
||||||
|
阶段7 做游戏,7.2,用引擎实现完整游戏循环(菜单到结算到存档),代码,⚠️无现成教程,串起所有系统并反向补全引擎,,从头玩到尾的完整小游戏
|
||||||
|
阶段7 做游戏,7.3,打磨与优化(性能/手感juice),代码,🔧有教程需改写,GDC "Juice it or lose it"(B站搬运),https://www.bilibili.com/,手感舒服不卡顿
|
||||||
|
阶段7 做游戏,7.4,跨平台打包与发布(Win/Mac/Linux/可选WASM),工具,✅/🔧,cargo build --release + 学习wgpu中文版Web章,https://jinleili.github.io/learn-wgpu-zh/,发给朋友能玩/发布itch.io
|
||||||
|
Can't render this file because it contains an unexpected character in line 3 and column 80.
|
306
引擎学习开发计划.md
Normal file
306
引擎学习开发计划.md
Normal file
@ -0,0 +1,306 @@
|
|||||||
|
# 用 Rust 从零构建 2D 游戏引擎 —— 完整学习与开发计划
|
||||||
|
|
||||||
|
> 适用对象:**零编程经验、零引擎经验**的初学者
|
||||||
|
> 目标:① 系统巩固游戏引擎知识 → ② 亲手造一个能用的 2D 引擎 → ③ 用它做一款小游戏
|
||||||
|
> 时间:不设硬性期限,以"真正学会"为准
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 一、先读这段(最重要的认知)
|
||||||
|
|
||||||
|
1. **没有"一条龙"中文教程。** 没有任何单一教程能带你"从零用 Rust 写完整 2D 引擎"。这件事的本质是**拼装**:Rust 语言、数学、图形学、各个引擎子系统,分别有各自的好教程,你要把它们组装起来。本计划就是这张"组装说明书"。
|
||||||
|
|
||||||
|
2. **引擎理论是跨语言的。** 著名的 **The Cherno 游戏引擎系列**(B站有中文字幕/配音搬运)虽然用 C++,但它讲的**架构思想**(事件系统、渲染抽象层、ECS、编辑器)是通用的。看它学"为什么这么设计",回到 Rust 自己实现。
|
||||||
|
|
||||||
|
3. **不要一上来就造引擎。** 正确顺序是:先学会 Rust → 用现成简单库(macroquad)做几个小游戏,理解"游戏循环/精灵/输入"是什么感觉 → 再学 wgpu 自己写渲染器 → 再逐个搭建引擎系统。**先会用,再会造。**
|
||||||
|
|
||||||
|
4. **教程标记含义:**
|
||||||
|
- ✅ **有直接中文教程** —— 跟着做即可
|
||||||
|
- 🔧 **有教程需改写** —— 教程是英文或别的语言(如 C++),思想通用,需自己翻译成 Rust
|
||||||
|
- ⚠️ **无现成教程** —— 需查文档+参考开源引擎源码自己实现(这是最能巩固知识的环节)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 二、阶段总览(路线图)
|
||||||
|
|
||||||
|
| 阶段 | 名称 | 核心目标 | 大致占比 |
|
||||||
|
|------|------|----------|----------|
|
||||||
|
| 阶段 0 | 地基:语言 + 数学 + 图形学认知 | 能读会写 Rust,懂向量矩阵,懂图形学基本概念 | 最大头 |
|
||||||
|
| 阶段 1 | 工具链与环境 | 搭好开发环境,理解 Cargo 生态 | 小 |
|
||||||
|
| 阶段 2 | 窗口与渲染入门 | 开窗口、画出第一个三角形/精灵 | 中 |
|
||||||
|
| 阶段 3 | 自己的 2D 渲染器 | 精灵、纹理、批处理、摄像机、文字 | 大 |
|
||||||
|
| 阶段 4 | 引擎核心架构 | 游戏循环、ECS、事件、资源、日志 | 大 |
|
||||||
|
| 阶段 5 | 引擎子系统 | 输入、音频、物理/碰撞、动画、粒子、场景 | 大 |
|
||||||
|
| 阶段 6 | 编辑器与工具链 | egui 编辑器、序列化、热重载 | 中 |
|
||||||
|
| 阶段 7 | 用引擎做一款游戏 | 完整小游戏 + 跨平台打包发布 | 中 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 阶段 0 —— 地基(语言 / 数学 / 图形学认知)
|
||||||
|
|
||||||
|
> 这是零基础玩家最容易想跳过、但绝对不能跳过的部分。地基不牢,后面寸步难行。
|
||||||
|
|
||||||
|
### 0.1 编程与 Rust 语言入门 ✅
|
||||||
|
- **任务**:掌握变量、控制流、函数、所有权(ownership)、借用、生命周期、结构体、枚举、trait、泛型、错误处理、模块、Cargo。
|
||||||
|
- **中文教程**:
|
||||||
|
- 《Rust 程序设计语言》简体中文版(官方书翻译,权威):https://kaisery.github.io/trpl-zh-cn/
|
||||||
|
- 《Rust 语言圣经》(讲解最细、最贴近实战):https://course.rs/ ,配套练习:https://practice.course.rs/
|
||||||
|
- **产出**:能独立写出带结构体/枚举/trait 的小程序(如命令行计算器、待办清单)。
|
||||||
|
|
||||||
|
### 0.2 数据结构与基本算法 ✅/🔧
|
||||||
|
- **任务**:数组/动态数组、哈希表、栈、队列、树;时间复杂度概念。引擎里到处是它们。
|
||||||
|
- **资源**:《Rust 语言圣经》中"手把手实现链表"章节;其余概念可看任意中文数据结构课程(B站搜"数据结构 基础"),思想通用。
|
||||||
|
- **产出**:理解"为什么 ECS 用连续数组存组件会更快"。
|
||||||
|
|
||||||
|
### 0.3 游戏数学:线性代数 ✅
|
||||||
|
- **任务**:向量(加减、点乘、叉乘、归一化)、矩阵(变换、平移/旋转/缩放)、坐标系、正交投影。**2D 引擎几乎只需要这些。**
|
||||||
|
- **中文教程**:
|
||||||
|
- **GAMES101 现代计算机图形学入门(闫令琪)** 前几讲专门复习线性代数与变换,强烈推荐:https://www.bilibili.com/video/BV1X7411F744/
|
||||||
|
- 配套笔记很多(知乎搜 "GAMES101 笔记")。
|
||||||
|
- **产出**:能手算"把一个点旋转 30° 再平移"对应的矩阵。
|
||||||
|
|
||||||
|
### 0.4 计算机图形学基础认知 ✅
|
||||||
|
- **任务**:理解光栅化、像素、帧缓冲、颜色、什么是 GPU/着色器、渲染管线大致流程。**只需 2D 相关部分,光线追踪/动画那几讲可略读。**
|
||||||
|
- **中文教程**:GAMES101(同上),重点看"光栅化""变换"部分。
|
||||||
|
- **产出**:能说清"一张图片是怎么显示到屏幕上的"。
|
||||||
|
|
||||||
|
### 0.5 游戏引擎宏观认知 + 设计模式 🔧
|
||||||
|
- **任务**:建立"引擎由哪些系统组成"的整体地图;学常见游戏编程模式(游戏循环、状态机、观察者、对象池、组件模式等)。
|
||||||
|
- **资源**:
|
||||||
|
- **《游戏编程模式》中文版**(免费在线,必读):https://gpp.tkchu.me/ 或镜像 https://github.com/tkchu/Game-Programming-Patterns-CN
|
||||||
|
- **The Cherno 游戏引擎系列**(B站中文字幕)第 1 集"系列介绍"先建立全局观:https://www.bilibili.com/video/BV14v411h7Hu/
|
||||||
|
- (进阶参考书)《游戏引擎架构》(Jason Gregory) 有中文纸质版,可作长期工具书,不必现在读完。
|
||||||
|
- **产出**:能画出一张"我的引擎要有哪些模块"的草图。
|
||||||
|
|
||||||
|
### 0.6 Git 版本控制 ✅
|
||||||
|
- **任务**:init / add / commit / branch / merge / 远程仓库,会用 GitHub。
|
||||||
|
- **中文教程**:廖雪峰《Git 教程》:https://liaoxuefeng.com/books/git/introduction/index.html
|
||||||
|
- **产出**:把你的引擎项目托管到 GitHub,养成提交习惯。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 阶段 1 —— 工具链与开发环境
|
||||||
|
|
||||||
|
### 1.1 安装 Rust 工具链 ✅
|
||||||
|
- **任务**:用 `rustup` 安装 Rust,理解 `cargo`(构建/依赖/运行/测试一体)。
|
||||||
|
- **教程**:TRPL 中文版"入门指南":https://kaisery.github.io/trpl-zh-cn/ch01-00-getting-started.html
|
||||||
|
- **产出**:`cargo new`、`cargo run` 跑通 Hello World。
|
||||||
|
|
||||||
|
### 1.2 编辑器/IDE 配置 ✅
|
||||||
|
- **任务**:VS Code + `rust-analyzer` 插件(自动补全、报错、跳转);会用调试器。
|
||||||
|
- **教程**:B站搜 "VS Code Rust 开发环境配置",或 rust-analyzer 官网。
|
||||||
|
- **产出**:写代码有智能提示和实时报错。
|
||||||
|
|
||||||
|
### 1.3 理解 crate 生态 ✅
|
||||||
|
- **任务**:会查 https://crates.io 和 https://docs.rs ;理解后面要用的关键库定位:
|
||||||
|
- `winit`(窗口)、`wgpu`(图形)、`glam`(数学)、`image`(图片加载)、`rodio`/`kira`(音频)、`egui`(GUI)、`serde`(序列化)、`hecs`/`bevy_ecs`(ECS,可选)。
|
||||||
|
- **产出**:能自己在 docs.rs 查一个库怎么用。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 阶段 2 —— 窗口与渲染入门(先会用,建立手感)
|
||||||
|
|
||||||
|
### 2.A 用现成简单库做手感(强烈建议先做)✅/🔧
|
||||||
|
- **任务**:用 **macroquad**(极简 2D 库)做 1~2 个小游戏(贪吃蛇、打砖块),亲身体会"游戏循环、画精灵、读输入、播音效"。**这一步让你知道引擎最终要给用户提供什么样的体验。**
|
||||||
|
- **教程**:
|
||||||
|
- 官方书《Game Development in Rust with Macroquad》(英文,但代码极短易懂):https://mq.agical.se/
|
||||||
|
- macroquad 仓库示例:https://github.com/not-fl3/macroquad
|
||||||
|
- 中文较少,B站搜 "macroquad" / "Rust 游戏" 有零星视频。
|
||||||
|
- **产出**:一个能玩的贪吃蛇。**做完你会对"引擎该有什么"豁然开朗。**
|
||||||
|
|
||||||
|
### 2.B 开始造引擎:窗口 + GPU 初始化 ✅
|
||||||
|
- **任务**:用 `winit` 创建窗口、处理窗口事件(关闭、缩放);用 `wgpu` 初始化 GPU、画出第一个三角形。
|
||||||
|
- **中文教程**:
|
||||||
|
- **《学习 wgpu》中文版**(核心教程,从开窗到三角形手把手):https://jinleili.github.io/learn-wgpu-zh/
|
||||||
|
- 英文原版(更新更快):https://sotrh.github.io/learn-wgpu/
|
||||||
|
- **产出**:自己的窗口里出现一个彩色三角形。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 阶段 3 —— 构建自己的 2D 渲染器
|
||||||
|
|
||||||
|
> 跟着《学习 wgpu》中文版逐章推进,同时把通用代码抽象成"你引擎的渲染模块"。
|
||||||
|
|
||||||
|
### 3.1 渲染管线 / 着色器 / 顶点缓冲 ✅
|
||||||
|
- 教程:《学习 wgpu》中文版 "管线 / 缓冲区 / 纹理" 各章。
|
||||||
|
- 产出:理解 WGSL 着色器、顶点/索引缓冲。
|
||||||
|
|
||||||
|
### 3.2 纹理加载与精灵(Sprite)渲染 ✅
|
||||||
|
- 任务:用 `image` 库加载 PNG,渲染成带贴图的四边形(Quad)。
|
||||||
|
- 教程:《学习 wgpu》中文版 "纹理与绑定组" 章节。
|
||||||
|
- 产出:屏幕上显示一张图片。
|
||||||
|
|
||||||
|
### 3.3 摄像机与正交投影 ✅
|
||||||
|
- 任务:实现 2D 正交摄像机(平移、缩放),世界坐标↔屏幕坐标。
|
||||||
|
- 教程:《学习 wgpu》中文版 "Uniform 缓冲与摄像机" 章节(其相机虽是3D,2D 把它简化为正交即可)。
|
||||||
|
- 数学依赖:阶段 0.3 的投影矩阵。
|
||||||
|
- 产出:能移动/缩放视角看场景。
|
||||||
|
|
||||||
|
### 3.4 批处理渲染(Batch Rendering)⚠️/🔧
|
||||||
|
- 任务:把成百上千个精灵合并成少量 draw call,这是 2D 引擎性能关键。
|
||||||
|
- 资源:**The Cherno** 有专门的 "2D Batch Rendering" 系列(C++,思想直接照搬到 wgpu):B站搜 "Cherno 批处理 / Batch"。
|
||||||
|
- 产出:能流畅画上千个精灵。
|
||||||
|
|
||||||
|
### 3.5 文本渲染 🔧
|
||||||
|
- 任务:渲染文字(字体图集/SDF)。可用 `glyphon` / `wgpu_text` 等库,或自己做位图字体。
|
||||||
|
- 资源:相关库的英文 README + 示例;位图字体原理 B站可搜。
|
||||||
|
- 产出:屏幕上显示分数、调试信息。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 阶段 4 —— 引擎核心架构
|
||||||
|
|
||||||
|
### 4.1 游戏主循环(固定时间步长)🔧
|
||||||
|
- 任务:实现 `update`/`render` 分离、固定时间步(fixed timestep)让物理稳定、帧率无关。
|
||||||
|
- 资源:**《游戏编程模式》"游戏循环"一章**(中文,必读):https://gpp.tkchu.me/game-loop.html
|
||||||
|
- 产出:物理在不同帧率下表现一致。
|
||||||
|
|
||||||
|
### 4.2 数学库集成 ✅
|
||||||
|
- 任务:引入 `glam`(向量/矩阵/四元数高性能库),统一引擎数学类型。
|
||||||
|
- 资源:glam docs.rs;概念已在阶段 0.3 掌握。
|
||||||
|
- 产出:引擎里有统一的 `Vec2 / Mat3` 等类型。
|
||||||
|
|
||||||
|
### 4.3 日志系统 ✅
|
||||||
|
- 任务:用 `log` + `env_logger` 或 `tracing` 做分级日志。
|
||||||
|
- 资源:库 README;The Cherno 也有 "Logging" 一集讲设计思路。
|
||||||
|
- 产出:能打印分级调试信息。
|
||||||
|
|
||||||
|
### 4.4 事件系统 🔧
|
||||||
|
- 任务:窗口/输入/自定义事件的分发机制(观察者模式)。
|
||||||
|
- 资源:**The Cherno "Event System" 系列**(C++,思想通用);《游戏编程模式》观察者/事件队列章节(中文)。
|
||||||
|
- 产出:输入和窗口事件能被各系统订阅处理。
|
||||||
|
|
||||||
|
### 4.5 ECS(实体-组件-系统)架构 ✅/⚠️
|
||||||
|
- 任务:理解并使用 ECS 组织游戏对象。**两条路线选一**:
|
||||||
|
- **(推荐先用现成)** 集成 `hecs` 或 `bevy_ecs`,先学会用。
|
||||||
|
- **(进阶自造)** 自己实现一个简易 ECS,彻底搞懂原理(最巩固知识,但难)。
|
||||||
|
- 中文资源:
|
||||||
|
- Bevy 中文教程理解 ECS 思想:https://bevy-cheatbook.github.io 的中文版 https://yiviv.com/bevy-cheatbook/ ;ECS 入门:https://bevyengine-cn.github.io/learn/book_cn/getting-started/ecs/
|
||||||
|
- 《游戏编程模式》"组件模式"一章(中文)。
|
||||||
|
- 产出:能用 ECS 创建实体、挂组件、写系统遍历。
|
||||||
|
|
||||||
|
### 4.6 资源管理(Asset Manager)⚠️
|
||||||
|
- 任务:统一加载/缓存纹理、音频、字体,用句柄(handle)引用,避免重复加载。
|
||||||
|
- 资源:参考 Bevy 的 Assets 设计(看文档/源码);无直接中文教程,需自己设计。
|
||||||
|
- 产出:`assets.load::<Texture>("player.png")` 这样的接口。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 阶段 5 —— 引擎子系统
|
||||||
|
|
||||||
|
### 5.1 输入系统 🔧
|
||||||
|
- 任务:封装键盘、鼠标、手柄(`gilrs`)状态,提供"本帧是否按下/持续按住"查询和按键映射(Action)。
|
||||||
|
- 资源:winit 输入事件文档;手柄用 `gilrs` README。
|
||||||
|
- 产出:`input.is_pressed(Key::Space)` 接口。
|
||||||
|
|
||||||
|
### 5.2 音频系统 ✅/🔧
|
||||||
|
- 任务:播放音效与背景音乐、音量控制。用 `kira`(游戏向,推荐)或 `rodio`。
|
||||||
|
- 资源:库 README/示例;B站可搜 "Rust 音频 rodio"。
|
||||||
|
- 产出:游戏里能放音效和 BGM。
|
||||||
|
|
||||||
|
### 5.3 2D 物理与碰撞检测 🔧⚠️
|
||||||
|
- 任务:AABB 碰撞检测、圆形碰撞、碰撞响应;**两条路线**:
|
||||||
|
- 入门:自己实现 AABB/圆碰撞(最巩固知识)。
|
||||||
|
- 进阶:集成 `rapier2d`(成熟 2D 物理引擎)。
|
||||||
|
- 资源:
|
||||||
|
- 碰撞检测原理 B站搜 "2D 碰撞检测 AABB / 分离轴定理 SAT"。
|
||||||
|
- 自写物理引擎经典系列(英文):Randy Gaul 的 2D 物理教程,可配合翻译阅读。
|
||||||
|
- `rapier2d` 官方文档与中文社区文章。
|
||||||
|
- 产出:角色能站在平台上、被墙挡住。
|
||||||
|
|
||||||
|
### 5.4 精灵动画系统 ⚠️
|
||||||
|
- 任务:序列帧动画、精灵图集(atlas)切割、动画状态机。
|
||||||
|
- 资源:无完整中文教程;状态机参考《游戏编程模式》"状态"一章(中文)。
|
||||||
|
- 产出:角色能播放走/跳/待机动画。
|
||||||
|
|
||||||
|
### 5.5 粒子系统 🔧
|
||||||
|
- 任务:发射器、粒子生命周期、批量渲染粒子(复用 3.4 批处理)。
|
||||||
|
- 资源:The Cherno 有 "Particle System" 一集(C++,思想通用)。
|
||||||
|
- 产出:爆炸/火焰等特效。
|
||||||
|
|
||||||
|
### 5.6 场景管理与序列化 ✅/⚠️
|
||||||
|
- 任务:场景(Scene)概念、实体的保存/加载,用 `serde` + `ron`/`json` 序列化。
|
||||||
|
- 资源:`serde` 中文文章较多(B站/掘金搜 "Rust serde");场景设计需自己规划。
|
||||||
|
- 产出:能把一个关卡存成文件再读回来。
|
||||||
|
|
||||||
|
### 5.7 游戏内 UI 系统 ✅
|
||||||
|
- 任务:按钮、文本、血条等。推荐集成 **egui**(即时模式 GUI,对接 wgpu 成熟)。
|
||||||
|
- 资源:egui 官方示例 + B站搜 "Rust egui 教程";在线 demo 直观。
|
||||||
|
- 产出:主菜单、暂停界面、HUD。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 阶段 6 —— 编辑器与工具链
|
||||||
|
|
||||||
|
> 引擎区别于"一堆库"的关键,就是有可视化工具。这一阶段会让你的引擎"专业感"质变。
|
||||||
|
|
||||||
|
### 6.1 集成 egui 编辑器面板 ✅
|
||||||
|
- 任务:用 egui 做实体列表、属性面板(Inspector)、场景视图。
|
||||||
|
- 资源:egui 文档 + The Cherno "Editor" 系列建立设计观(C++)。
|
||||||
|
- 产出:能在编辑器里选中实体、改它的位置/属性。
|
||||||
|
|
||||||
|
### 6.2 资源热重载(Hot Reload)⚠️
|
||||||
|
- 任务:监听文件变化(`notify` 库),改了图片/配置自动生效。
|
||||||
|
- 资源:`notify` 库 README;无直接中文教程,自行实现。
|
||||||
|
- 产出:改图不用重启程序。
|
||||||
|
|
||||||
|
### 6.3 关卡/地图编辑 ⚠️/🔧
|
||||||
|
- 任务:自做简易关卡编辑器,或对接 **Tiled** 地图编辑器(`tiled` 库读取 `.tmx`)。
|
||||||
|
- 资源:Tiled 官方(有中文界面);`tiled` rust 库 README。
|
||||||
|
- 产出:能用编辑器拼一张关卡地图。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 阶段 7 —— 用你的引擎做一款游戏
|
||||||
|
|
||||||
|
### 7.1 选题与游戏设计 ✅
|
||||||
|
- 任务:选一个**小而完整**的题材(平台跳跃 / 俯视角射击 / 塔防)。写一页纸设计文档。
|
||||||
|
- 资源:游戏设计入门看 B站/indienova 独立游戏社区文章。
|
||||||
|
- 产出:一份明确范围的设计文档(切忌做大)。
|
||||||
|
|
||||||
|
### 7.2 用引擎实现完整游戏循环 ⚠️
|
||||||
|
- 任务:把前面所有系统串起来:菜单→关卡→玩法→结算→存档。在做的过程中反过来补全引擎缺失功能。
|
||||||
|
- 产出:一个从头玩到尾的完整小游戏。
|
||||||
|
|
||||||
|
### 7.3 打磨与优化 🔧
|
||||||
|
- 任务:性能分析、内存优化、手感调优(juice:震屏、音效反馈)。
|
||||||
|
- 资源:The Cherno / GDC 演讲 "Juice it or lose it"(B站有搬运)。
|
||||||
|
- 产出:手感舒服、不卡顿。
|
||||||
|
|
||||||
|
### 7.4 跨平台打包与发布 ✅/🔧
|
||||||
|
- 任务:Windows/Linux/Mac 打包,资源随程序分发;可选 WebAssembly 上网页(`wasm`)。
|
||||||
|
- 资源:`cargo build --release`;wgpu/winit 对 WASM 支持的文档(《学习 wgpu》中文版有 Web 章节)。
|
||||||
|
- 产出:把游戏发给朋友能直接玩,或发布到 itch.io。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 三、贯穿全程的好习惯
|
||||||
|
|
||||||
|
- **每个阶段都写小 demo 验证**,别憋大招。能跑起来的丑东西,胜过完美的设想。
|
||||||
|
- **多读开源引擎源码**当字典:`Bevy`(最大最现代)、`ggez`(小而经典 2D)、`macroquad`(极简)。遇到不会的就去翻它们怎么写。
|
||||||
|
- **理论卡住时回到 GAMES101 和《游戏编程模式》**,它们能解答"为什么"。
|
||||||
|
- **The Cherno 系列**用来学架构思想(C++→Rust 转换是很好的锻炼)。
|
||||||
|
- 坚持用 Git 提交,给自己留回溯点。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 四、核心中文资源清单(收藏夹)
|
||||||
|
|
||||||
|
| 用途 | 资源 | 链接 |
|
||||||
|
|------|------|------|
|
||||||
|
| Rust 官方书中文 | Rust 程序设计语言 简体中文版 | https://kaisery.github.io/trpl-zh-cn/ |
|
||||||
|
| Rust 实战教程 | Rust 语言圣经 | https://course.rs/ |
|
||||||
|
| Rust 在线练习 | Rust 语言圣经练习 | https://practice.course.rs/ |
|
||||||
|
| 图形学/数学 | GAMES101(闫令琪,B站) | https://www.bilibili.com/video/BV1X7411F744/ |
|
||||||
|
| 引擎架构思想 | The Cherno 游戏引擎系列(B站中字) | https://www.bilibili.com/video/BV14v411h7Hu/ |
|
||||||
|
| 设计模式 | 游戏编程模式 中文版 | https://gpp.tkchu.me/ |
|
||||||
|
| GPU/渲染 | 学习 wgpu 中文版 | https://jinleili.github.io/learn-wgpu-zh/ |
|
||||||
|
| 2D 入门库 | Macroquad(书+示例,英文) | https://mq.agical.se/ |
|
||||||
|
| ECS 思想 | Bevy Cheatbook 中文 | https://yiviv.com/bevy-cheatbook/ |
|
||||||
|
| Git | 廖雪峰 Git 教程 | https://liaoxuefeng.com/books/git/introduction/index.html |
|
||||||
|
|
||||||
|
> 详细逐条任务见同目录下的 **引擎学习开发计划.csv**(可导入表格软件当进度看板用)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*祝你造引擎愉快。记住:第一个引擎一定会很烂,这很正常——它的价值不是"好用",而是让你真正理解了引擎是怎么回事。*
|
||||||
BIN
引擎学习开发计划.xlsx
Normal file
BIN
引擎学习开发计划.xlsx
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user