为什么选它#
Unholy Heights(房东是魔王大人) 是 Petit Depotto 出品的魔物公寓经营模拟 + 塔防游戏:
- 玩家扮演魔王,经营一栋住满魔物的公寓
- 魔物是房客也是战斗力:安排房间、收租、应对勇者入侵
- 美术风格独特、系统不算庞大,非常适合作为第一个完整移植对象
技术上它是 C# + XNA 4.0 写的——和 MonoGame 同源(MonoGame 就是 XNA 的开源继任者)。这意味着移植路线非常清晰:
C# / XNA 4.0 ──► C++ / Vulkan (通过 Bocchi House 平台)移植路线#
1. 架构翻译#
XNA 游戏的核心循环是 Update/Draw,这正是 Bocchi House game_framework 提供的结构:
class Game {
virtual void Initialize();
virtual void LoadContent();
virtual void Update(GameTime);
virtual void Draw(GameTime);
};所以移植第一步不是翻译代码,而是对齐架构:把 XNA 的 Game 换成平台的 Game,把 SpriteBatch.Draw 换成平台的 SpriteBatch。
2. 渲染 API 翻译#
| XNA | Bocchi House |
|---|---|
SpriteBatch | graphics_adapter::SpriteBatch |
Texture2D | TextureManager 管理的 VkImage |
SpriteFont | SpriteFont(DrawString 已实现) |
ContentManager | rawfile 内容流(规划中) |
XNA 的 SpriteBatch 和 Vulkan 的渲染模型差异不小,好在这部分由平台层统一消化,游戏代码里看起来还是"精灵 + 纹理 + 字体"的老三样。
3. 资源翻译#
- 纹理:从 XNB / 原始图片格式加载,通过
TextureManager走 staging buffer 上传到 GPU - 字体:
SpriteFont负责文本绘制,依赖SpriteBatch::Flush完成批处理上屏 - 音频:
audio_adapter的AudioCore框架已设计完成(BGM/SE + 音量控制),待实现
当前状态#
- ✅ 页面已集成
GameScreen(测试页跑通) - 🔄
SpriteBatch完整管线:着色器/顶点缓冲已建,Flush 未实现——这是当前最卡的一步 - 🔄
TextureManager:VkImage/View/Sampler 已建,staging upload 未实现 - ⬜ 游戏逻辑 C# → C++ 完整翻译
踩坑预告#
XNA 到 Vulkan 的移植,最大的坑集中在渲染状态上:
- XNA 的
SpriteBatch.Begin/End内部管理混合/采样状态,Vulkan 里要显式维护 RenderPass 与 Pipeline 切换 - XNA 的坐标系统是"左上原点 + Y 向下",Vulkan 的 NDC 是 Y 向上——投影矩阵要处理翻转
- XNA 自动处理
DrawOrder排序,C++ 侧要自己维护绘制列表
这些会在实现 SpriteBatch::Flush 时逐一展开记录。