4

我是一名 C# 开发人员,致力于转换为 Mono Android。这些转换工作完美,除了当手机超时或黑屏并且用户再次触摸屏幕时......游戏失败了。

处理这个问题的最简单方法是什么?我听说它被称为生命周期,发现很多关于这个周期的简要描述,没有解释如何通过实例来实现它,尤其是如何通过 XNA 转换来实现它。

我的第一个解决方案是在 XNA 游戏中使用“暂停”方法,并为 Android 的“onPause”运行该方法。然而,可能有更简单的方法来处理这个问题,因为我听说有简单的 Mono Android 设置可供选择,可以自动处理超时和电话呼叫。

我要问的是..如何让我的 XnA 转​​换继续通过电话、屏幕超时等运行?

4

1 回答 1

1

请问您是使用MonoGame还是简单地使用 Mono for Android 附带的AndroidGameView ?

如果您使用的是 AndroidGameView,我建议您按照纹理立方体示例在 OnLoad() 中手动重新加载纹理的约定。

使用 MonoGame 时,如果您通过 加载纹理ContentManager.Load<Texture2D>(),则会为您处理重新加载。使用加载的纹理Texture2D.FromStream必须在GraphicsDevice.DeviceReset事件中手动重新加载。

正如 Andrew Russell 所指出的,ExEn的优势在于它不需要在每个简历上重新加载纹理。但是,在 Android 上支持重新加载图形资源仍然是必要的(或至少是良好的做法)。在许多设备上,如果没有它,您的游戏将无法从切换和返回中优雅地恢复。ExEn 目前不支持重新加载纹理。

Xamarin 目前正在修复AndroidGameView 中的一个错误,该错误将允许它在设备支持的位置正确恢复。一旦发布,这应该流向 MonoGame。

除了重新加载纹理和其他图形资源之外,生命周期的处理应该是相当简单的。MonoGame 尚未实现完整的 Windows Phone 生命周期(即墓碑和补水),但根据我的经验,这不是必需的。您可以将Game.ActivatedGame.Deactivated事件用于在恢复游戏时显示暂停屏幕之类的事情。

于 2013-01-11T16:05:43.847 回答