跳过正文
  1. 项目/
  2. Bocchi House 移植平台/

Unholy Heights:把 XNA 经营塔防搬上鸿蒙(C# → C++)

·179 字·1 分钟·
FunBocchi
作者
FunBocchi
游戏引擎、图形编程爱好者。正在把 MonoGame 3.8.x 逐行移植为 C++20 并跑在鸿蒙上;也在做 Bocchi House 游戏移植平台与各种经典游戏的 HarmonyOS 移植。
目录
Bocchi House 移植平台 - 这篇文章属于一个选集。
§ : 本文

为什么选它
#

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 翻译
#

XNABocchi House
SpriteBatchgraphics_adapter::SpriteBatch
Texture2DTextureManager 管理的 VkImage
SpriteFontSpriteFont(DrawString 已实现)
ContentManagerrawfile 内容流(规划中)

XNA 的 SpriteBatch 和 Vulkan 的渲染模型差异不小,好在这部分由平台层统一消化,游戏代码里看起来还是"精灵 + 纹理 + 字体"的老三样

3. 资源翻译
#

  • 纹理:从 XNB / 原始图片格式加载,通过 TextureManager 走 staging buffer 上传到 GPU
  • 字体:SpriteFont 负责文本绘制,依赖 SpriteBatch::Flush 完成批处理上屏
  • 音频:audio_adapterAudioCore 框架已设计完成(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 时逐一展开记录。

Bocchi House 移植平台 - 这篇文章属于一个选集。
§ : 本文

相关文章