Add game architecture board
This commit is contained in:
@@ -0,0 +1,398 @@
|
||||
# 游戏整体架构计划:思维导图与白板
|
||||
|
||||
目标:把项目从“能跑的白盒 Demo”推进为可持续扩展的横板 2D ACT 清版游戏工程。本文先作为整体架构白板,后续每个模块再拆成独立任务文档。
|
||||
|
||||
## 思维导图
|
||||
|
||||
```mermaid
|
||||
mindmap
|
||||
root((横板 2D ACT 游戏))
|
||||
核心体验
|
||||
横向推进
|
||||
清版战斗
|
||||
平台移动
|
||||
近战连段
|
||||
关卡节奏
|
||||
游戏循环
|
||||
进入关卡
|
||||
探索与移动
|
||||
触发战斗区域
|
||||
击败敌人
|
||||
解锁推进
|
||||
结算与升级
|
||||
角色系统
|
||||
玩家
|
||||
输入
|
||||
移动
|
||||
跳跃
|
||||
攻击
|
||||
受击
|
||||
动画状态机
|
||||
敌人
|
||||
巡逻
|
||||
追击
|
||||
攻击
|
||||
受击硬直
|
||||
死亡
|
||||
NPC与可交互物
|
||||
对话
|
||||
机关
|
||||
可破坏物
|
||||
战斗系统
|
||||
Hitbox
|
||||
Hurtbox
|
||||
伤害结算
|
||||
击退
|
||||
霸体
|
||||
连击窗口
|
||||
命中特效
|
||||
调试显示
|
||||
关卡系统
|
||||
场景数据
|
||||
碰撞数据
|
||||
视觉层
|
||||
战斗区域
|
||||
敌人出生点
|
||||
镜头限制
|
||||
出入口
|
||||
渲染与资源
|
||||
Sprite
|
||||
Tileset
|
||||
背景视差
|
||||
前景遮挡
|
||||
特效
|
||||
音频
|
||||
资源清单
|
||||
数据驱动
|
||||
动画表
|
||||
角色参数
|
||||
敌人配置
|
||||
关卡配置
|
||||
攻击配置
|
||||
掉落配置
|
||||
工具与调试
|
||||
白盒编辑
|
||||
碰撞可视化
|
||||
战斗区域可视化
|
||||
Hitbox可视化
|
||||
帧率与日志
|
||||
构建文档
|
||||
```
|
||||
|
||||
## 白板总览
|
||||
|
||||
```text
|
||||
+----------------------+ +----------------------+ +----------------------+
|
||||
| Game Loop | ---> | Scene | ---> | Stage |
|
||||
| 关卡进入/推进/结算 | | 场景编排与生命周期 | | 关卡数据与视觉层 |
|
||||
+----------------------+ +----------------------+ +----------------------+
|
||||
| | |
|
||||
v v v
|
||||
+----------------------+ +----------------------+ +----------------------+
|
||||
| Actor | ---> | Movement | ---> | Collision |
|
||||
| 玩家/敌人/道具/物体 | | 重力/速度/平台移动 | | 地面/平台/边界 |
|
||||
+----------------------+ +----------------------+ +----------------------+
|
||||
| |
|
||||
v v
|
||||
+----------------------+ +----------------------+ +----------------------+
|
||||
| Combat | ---> | Animation | ---> | Render |
|
||||
| Hitbox/伤害/击退 | | 状态机/帧表/过渡 | | Sprite/Tile/特效 |
|
||||
+----------------------+ +----------------------+ +----------------------+
|
||||
|
|
||||
v
|
||||
+----------------------+ +----------------------+ +----------------------+
|
||||
| Data | ---> | Debug | ---> | Build |
|
||||
| 配置表/关卡/参数 | | 可视化/日志/测试 | | PC/Switch/资源复制 |
|
||||
+----------------------+ +----------------------+ +----------------------+
|
||||
```
|
||||
|
||||
## 模块白板
|
||||
|
||||
### 1. Core
|
||||
|
||||
职责:
|
||||
|
||||
- 管理游戏级常量、资源路径、输入快照、运行配置。
|
||||
- 隔离 SDL 等底层输入细节,让角色逻辑只消费 `InputState`。
|
||||
- 为后续手柄、Switch Joy-Con、键位配置留接口。
|
||||
|
||||
已有:
|
||||
|
||||
- `core/game_config.h`
|
||||
- `core/asset_paths.h`
|
||||
- `core/input_state.*`
|
||||
|
||||
下一步:
|
||||
|
||||
- 增加 `GameContext`,统一传递全局服务。
|
||||
- 增加 `DebugFlags`,集中管理调试开关。
|
||||
- 输入层支持键盘和手柄统一映射。
|
||||
|
||||
### 2. Scene
|
||||
|
||||
职责:
|
||||
|
||||
- 管理场景生命周期。
|
||||
- 装载关卡数据。
|
||||
- 创建玩家、敌人、道具和场景对象。
|
||||
- 控制镜头、战斗区域、关卡推进。
|
||||
|
||||
已有:
|
||||
|
||||
- `scene/whitebox_scene.*`
|
||||
|
||||
下一步:
|
||||
|
||||
- 抽象 `GameplayScene` 作为通用玩法场景基类。
|
||||
- `WhiteboxScene` 只保留第一关测试内容。
|
||||
- 引入 battle zone 触发逻辑。
|
||||
|
||||
### 3. Stage
|
||||
|
||||
职责:
|
||||
|
||||
- 表达关卡世界:碰撞、视觉层、背景、道具、出生点、镜头范围。
|
||||
- 将白盒数据逐步替换为 tileset 和 props。
|
||||
|
||||
已有:
|
||||
|
||||
- `data/level_definition.h`
|
||||
- `data/whitebox_level.cpp`
|
||||
- `movement/platform_world.*`
|
||||
|
||||
下一步:
|
||||
|
||||
- 增加 `StageRenderer`。
|
||||
- 增加 `StageLayer` 数据结构。
|
||||
- 关卡宽度扩展到 2400 到 3200 像素。
|
||||
- 引入远景/中景/地面三层绘制。
|
||||
|
||||
### 4. Actor
|
||||
|
||||
职责:
|
||||
|
||||
- 表达游戏对象:玩家、敌人、道具、投射物、可破坏物。
|
||||
- 每个 Actor 只处理自身状态,不直接管理全局流程。
|
||||
|
||||
已有:
|
||||
|
||||
- `actor/player_actor.*`
|
||||
|
||||
下一步:
|
||||
|
||||
- 增加 `EnemyActor`。
|
||||
- 增加 `BreakablePropActor`。
|
||||
- 抽出 `CharacterActor` 作为玩家和敌人的共同基类。
|
||||
- 将玩家动画切换改为数据驱动。
|
||||
|
||||
### 5. Movement
|
||||
|
||||
职责:
|
||||
|
||||
- 处理速度、重力、平台落地、边界限制。
|
||||
- 后续支持斜坡、墙体、击退、空中状态。
|
||||
|
||||
已有:
|
||||
|
||||
- `MovementBody`
|
||||
- `PlatformWorld`
|
||||
- `PlatformMover`
|
||||
|
||||
下一步:
|
||||
|
||||
- 支持水平墙体阻挡。
|
||||
- 支持击退速度覆盖。
|
||||
- 支持落地事件。
|
||||
- 支持移动调试可视化。
|
||||
|
||||
### 6. Combat
|
||||
|
||||
职责:
|
||||
|
||||
- 管理攻击盒、受击盒、伤害结算、击退、硬直、命中特效。
|
||||
- 保证战斗逻辑不散落在 Actor 内部。
|
||||
|
||||
已有:
|
||||
|
||||
- `combat/hitbox.h`
|
||||
|
||||
下一步:
|
||||
|
||||
- 增加 `CombatSystem`。
|
||||
- 每帧收集 active hitbox / hurtbox。
|
||||
- 支持 team 过滤、重复命中过滤、伤害事件。
|
||||
- 增加 debug hitbox 绘制。
|
||||
|
||||
### 7. Animation
|
||||
|
||||
职责:
|
||||
|
||||
- 管理 spritesheet 帧、动画状态、播放速度、循环和过渡。
|
||||
- 避免每个 Actor 手写帧切换。
|
||||
|
||||
当前状态:
|
||||
|
||||
- `PlayerActor` 内部硬编码 idle/run/punch 动画。
|
||||
|
||||
下一步:
|
||||
|
||||
- 增加 `AnimationClip`。
|
||||
- 增加 `SpriteAnimator`。
|
||||
- 增加动画配置表。
|
||||
- 攻击动画和 hitbox active frame 绑定。
|
||||
|
||||
### 8. Data
|
||||
|
||||
职责:
|
||||
|
||||
- 将玩法参数从 C++ 硬编码逐步迁移到数据。
|
||||
- 支持关卡、敌人、动画、攻击、掉落配置。
|
||||
|
||||
当前状态:
|
||||
|
||||
- 关卡仍由 `CreateWhiteboxLevel()` 硬编码。
|
||||
|
||||
下一步:
|
||||
|
||||
- 先用 C++ struct 稳定字段。
|
||||
- 再迁移到 JSON 或编辑器导出格式。
|
||||
- 资源路径统一记录,避免散落字符串。
|
||||
|
||||
### 9. Render 与资源
|
||||
|
||||
职责:
|
||||
|
||||
- 绘制角色、关卡、背景、道具、特效和调试图形。
|
||||
- 管理资源目录和运行时拷贝。
|
||||
|
||||
已有:
|
||||
|
||||
- `game/assets/character/male/`
|
||||
- `game/assets/shaders/`
|
||||
- `xmake.lua` 自动复制 `game/assets`
|
||||
|
||||
下一步:
|
||||
|
||||
- 增加 `game/assets/stage/stage_01/`。
|
||||
- 引入 tileset、背景、props。
|
||||
- 增加视差背景绘制。
|
||||
- 建立素材来源和授权记录。
|
||||
|
||||
### 10. Debug 与工具
|
||||
|
||||
职责:
|
||||
|
||||
- 提供开发时必要的可视化和状态观察。
|
||||
- 降低调试碰撞、战斗和关卡触发的成本。
|
||||
|
||||
下一步:
|
||||
|
||||
- `F1` 切换 debug overlay。
|
||||
- 绘制平台碰撞。
|
||||
- 绘制 battle zone。
|
||||
- 绘制 spawn point。
|
||||
- 绘制 hitbox / hurtbox。
|
||||
- 输出当前场景、角色状态、FPS。
|
||||
|
||||
## 数据流白板
|
||||
|
||||
```text
|
||||
输入
|
||||
SDL Keyboard / Controller
|
||||
-> InputStateProvider
|
||||
-> InputState
|
||||
-> PlayerActor
|
||||
|
||||
移动
|
||||
PlayerActor / EnemyActor
|
||||
-> MovementBody
|
||||
-> PlatformMover
|
||||
-> PlatformWorld
|
||||
-> 更新 Actor position / grounded
|
||||
|
||||
战斗
|
||||
Actor 当前攻击状态
|
||||
-> 生成 Hitbox
|
||||
-> CombatSystem
|
||||
-> Hurtbox 匹配
|
||||
-> DamageEvent
|
||||
-> Actor 受击/击退/死亡
|
||||
|
||||
关卡
|
||||
LevelDefinition
|
||||
-> Scene 创建 Actor
|
||||
-> StageRenderer 绘制视觉层
|
||||
-> PlatformWorld 提供碰撞
|
||||
-> BattleZone 控制推进
|
||||
|
||||
渲染
|
||||
Scene::Render
|
||||
-> StageRenderer
|
||||
-> Actor::Render
|
||||
-> Effects
|
||||
-> DebugOverlay
|
||||
```
|
||||
|
||||
## 开发路线白板
|
||||
|
||||
### Milestone 1:白盒玩法闭环
|
||||
|
||||
目标:验证 ACT 基础手感。
|
||||
|
||||
- 玩家移动、跳跃、出拳稳定。
|
||||
- 第一关横向推进可从头跑到尾。
|
||||
- battle zone 可触发、锁镜头、解锁。
|
||||
- 有 1 种敌人占位。
|
||||
- 有 hitbox/hurtbox debug。
|
||||
|
||||
### Milestone 2:灰盒战斗验证
|
||||
|
||||
目标:验证清版节奏。
|
||||
|
||||
- 玩家 2 到 3 段基础连击。
|
||||
- 敌人追击、攻击、受击、死亡。
|
||||
- 每个 battle zone 有敌人波次。
|
||||
- 有简单掉落或奖励。
|
||||
- 关卡能完整结算。
|
||||
|
||||
### Milestone 3:第一关美术测试
|
||||
|
||||
目标:替换白盒视觉。
|
||||
|
||||
- 场景有 2 到 3 层视差背景。
|
||||
- 地面和平台使用 tileset。
|
||||
- props 丰富空间轮廓。
|
||||
- 保留 debug overlay。
|
||||
- 记录素材来源和授权。
|
||||
|
||||
### Milestone 4:数据化
|
||||
|
||||
目标:降低后续扩展成本。
|
||||
|
||||
- 动画配置数据化。
|
||||
- 攻击参数数据化。
|
||||
- 敌人参数数据化。
|
||||
- 关卡数据逐步外部化。
|
||||
|
||||
## 当前优先级
|
||||
|
||||
下一步建议按这个顺序做:
|
||||
|
||||
1. `StageRenderer`:让关卡视觉层从 Scene 中独立出来。
|
||||
2. `DebugOverlay`:显示碰撞、战斗区域和出生点。
|
||||
3. `BattleZone`:做清版推进的核心框架。
|
||||
4. `EnemyActor`:做第一个敌人占位。
|
||||
5. `CombatSystem`:把 hitbox/hurtbox 真正跑起来。
|
||||
6. `SpriteAnimator`:把玩家动画从硬编码改成组件。
|
||||
|
||||
## 素材协作提示
|
||||
|
||||
你找素材时优先找:
|
||||
|
||||
- 横版 tileset:地面、平台、墙面。
|
||||
- 远景/中景背景:可以横向拼接。
|
||||
- props:箱子、桶、路障、门、灯、标牌。
|
||||
- 敌人临时素材:有 idle/run/attack/hurt/death 最好。
|
||||
- 特效:命中火花、尘土、落地、破坏碎片。
|
||||
|
||||
素材回来后先不急着追求最终题材,先按 `stage_01` 做一个可玩的美术测试关。
|
||||
Reference in New Issue
Block a user