Organize game planning docs
This commit is contained in:
@@ -1,149 +0,0 @@
|
|||||||
# 游戏架构
|
|
||||||
|
|
||||||
该项目将游戏层与 Frostbite2D 引擎分离开来。引擎保留在 `Frostbite2D/`
|
|
||||||
目录下;游戏特定代码位于 `game/` 目录下。
|
|
||||||
|
|
||||||
## 目录结构
|
|
||||||
|
|
||||||
```text
|
|
||||||
game/
|
|
||||||
├─ assets/
|
|
||||||
│ ├─ character/ 运行时角色精灵图
|
|
||||||
│ └─ shaders/ 游戏目标使用的运行时着色器
|
|
||||||
├─ docs/
|
|
||||||
│ └─ ARCHITECTURE.md 本文档
|
|
||||||
└─ src/
|
|
||||||
├─ actor/ 游戏角色,如玩家、敌人、抛射物
|
|
||||||
├─ combat/ 碰撞箱、伤害判定和战斗解算类型
|
|
||||||
├─ core/ 共享配置、输入快照和资源路径
|
|
||||||
├─ data/ 关卡和游戏数据定义
|
|
||||||
├─ debug/ 调试可视化叠层
|
|
||||||
├─ movement/ 可复用的移动和碰撞辅助工具
|
|
||||||
├─ scene/ 游戏场景和关卡编排
|
|
||||||
├─ stage/ 关卡视觉层渲染
|
|
||||||
└─ main.cpp 游戏可执行文件入口点
|
|
||||||
```
|
|
||||||
|
|
||||||
## 运行时流程
|
|
||||||
|
|
||||||
```text
|
|
||||||
main.cpp
|
|
||||||
-> Application::init()
|
|
||||||
-> SceneManager::ReplaceScene(WhiteboxScene)
|
|
||||||
-> WhiteboxScene::onEnter()
|
|
||||||
-> CreateWhiteboxLevel()
|
|
||||||
-> 创建 PlayerActor
|
|
||||||
-> 将 PlatformWorld 传递给 PlayerActor
|
|
||||||
-> 每一帧:
|
|
||||||
-> PlayerActor 采样 InputState
|
|
||||||
-> PlayerActor 通过 PlatformMover 移动
|
|
||||||
-> PlayerActor 更新动画
|
|
||||||
-> WhiteboxScene 更新摄像机
|
|
||||||
-> StageRenderer 绘制关卡视觉层
|
|
||||||
-> Actor 渲染
|
|
||||||
-> DebugOverlay 绘制调试叠层
|
|
||||||
```
|
|
||||||
|
|
||||||
## 模块职责
|
|
||||||
|
|
||||||
`core`
|
|
||||||
|
|
||||||
- `game_config.h` 存储共享的调整常数,如虚拟分辨率、
|
|
||||||
重力、玩家速度和攻击持续时间
|
|
||||||
- `asset_paths.h` 存储稳定的运行时资源路径
|
|
||||||
- `debug_flags.h` 集中控制开发期调试显示开关
|
|
||||||
- `input_state.*` 将原始 SDL 键盘状态转换为与引擎无关的
|
|
||||||
`InputState` 快照。玩家逻辑使用此快照而不是直接读取
|
|
||||||
SDL
|
|
||||||
|
|
||||||
`movement`
|
|
||||||
|
|
||||||
- `PlatformWorld` 拥有关卡边界和平台矩形
|
|
||||||
- `MovementBody` 是可复用的位置/尺寸/速度容器
|
|
||||||
- `PlatformMover` 应用重力、限制水平边界并解算基本的
|
|
||||||
顶面平台着陆
|
|
||||||
|
|
||||||
`data`
|
|
||||||
|
|
||||||
- `LevelDefinition` 组合碰撞和白盒道具
|
|
||||||
- `CreateWhiteboxLevel()` 当前返回第一个硬编码的阻挡关卡。
|
|
||||||
稍后可以替换为 JSON、Tiled、LDtk 或自定义编辑器导出,
|
|
||||||
而无需更改 `PlayerActor`
|
|
||||||
|
|
||||||
`actor`
|
|
||||||
|
|
||||||
- `PlayerActor` 拥有玩家精灵、玩家状态和动画
|
|
||||||
- 它依赖于 `InputStateProvider` 和 `PlatformMover`,因此输入和移动
|
|
||||||
可以被敌人复用或独立更改
|
|
||||||
|
|
||||||
`scene`
|
|
||||||
|
|
||||||
- `WhiteboxScene` 编排当前关卡:加载关卡数据、创建
|
|
||||||
角色、委托关卡渲染、委托调试叠层并控制摄像机
|
|
||||||
|
|
||||||
`stage`
|
|
||||||
|
|
||||||
- `StageRenderer` 绘制当前关卡视觉层,包括背景、网格、白盒道具和平台
|
|
||||||
- 后续 tileset、视差背景和 props 渲染都应该优先接入该模块
|
|
||||||
|
|
||||||
`debug`
|
|
||||||
|
|
||||||
- `DebugOverlay` 绘制碰撞矩形和玩家包围盒
|
|
||||||
- `DebugFlags` 决定哪些调试层启用
|
|
||||||
|
|
||||||
`combat`
|
|
||||||
|
|
||||||
- `hitbox.h` 定义早期的 `Hitbox` 和 `Hurtbox` 结构体及团队过滤。
|
|
||||||
完整的 ACT 战斗应该建立在此基础上,而不是在
|
|
||||||
角色中嵌入打击判定
|
|
||||||
|
|
||||||
## 当前构建目标
|
|
||||||
|
|
||||||
`xmake.lua` 为 Windows 定义 `Frostbite2DGame`。它编译桌面游戏入口
|
|
||||||
`game/src/main.cpp` 和所有通用游戏源码,链接到 `Frostbite2D`,并在构建后
|
|
||||||
将 `game/assets` 复制到可执行文件旁边。
|
|
||||||
|
|
||||||
构建命令:
|
|
||||||
|
|
||||||
```powershell
|
|
||||||
xmake -b Frostbite2DGame
|
|
||||||
```
|
|
||||||
|
|
||||||
输出:
|
|
||||||
|
|
||||||
```text
|
|
||||||
build/windows/x64/release/Frostbite2DGame.exe
|
|
||||||
```
|
|
||||||
|
|
||||||
Switch/NS 游戏框架目标为 `Frostbite2DGameSwitch`。它复用
|
|
||||||
`game/src/main.cpp`,入口内部通过 `__SWITCH__` 编译分支处理平台差异,
|
|
||||||
并复用同一套 Scene、Stage、Actor、Movement、Debug 和 Data 模块。
|
|
||||||
|
|
||||||
构建命令:
|
|
||||||
|
|
||||||
```powershell
|
|
||||||
xmake -b Frostbite2DGameSwitch
|
|
||||||
```
|
|
||||||
|
|
||||||
输出:
|
|
||||||
|
|
||||||
```text
|
|
||||||
build/switch/aarch64/release/Frostbite2DGame.elf
|
|
||||||
build/switch/aarch64/release/switch_game/NSUnknownGame.nro
|
|
||||||
```
|
|
||||||
|
|
||||||
Switch 运行时资源目录优先使用内嵌 RomFS:
|
|
||||||
|
|
||||||
```text
|
|
||||||
romfs:/assets
|
|
||||||
```
|
|
||||||
|
|
||||||
## 后续架构步骤
|
|
||||||
|
|
||||||
1. 添加 `actor/enemy_actor.*` 并复用 `PlatformMover`
|
|
||||||
2. 添加 `combat/CombatSystem` 来收集每一帧的活跃碰撞箱和伤害判定箱、
|
|
||||||
解算打击并发出伤害事件
|
|
||||||
3. 用数据定义替换 `PlayerActor` 中的硬编码动画时序
|
|
||||||
4. 当第一个白盒循环稳定后,将 `CreateWhiteboxLevel()` 迁移到外部关卡格式
|
|
||||||
5. 如果多个关卡共享生成、摄像机、
|
|
||||||
战斗和暂停逻辑,则添加 `scene/gameplay_scene` 基类
|
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
# Game Docs
|
||||||
|
|
||||||
|
本文档目录只放游戏层相关文档;引擎、构建和仓库级说明仍保留在项目根目录。
|
||||||
|
|
||||||
|
## Planning
|
||||||
|
|
||||||
|
- `planning/game_architecture_board.md`:游戏整体架构白板,包含思维导图、模块划分、数据流和阶段路线。
|
||||||
|
- `planning/scene_build_plan.md`:第一关场景搭建计划,包含素材清单、场景分层和验收标准。
|
||||||
|
|
||||||
|
## Naming
|
||||||
|
|
||||||
|
- 文件名使用小写 `snake_case`。
|
||||||
|
- 长期有效的计划放入 `planning/`。
|
||||||
|
- 临时调研、实验记录后续单独放入 `research/` 或 `notes/`,避免混在根目录。
|
||||||
Reference in New Issue
Block a user