【问题标题】:Switching between Monogame and UIKit在 Monogame 和 UIKit 之间切换
【发布时间】:2014-05-05 00:14:07
【问题描述】:

我一直在搜索和搜索,但似乎无法找到适合我正在尝试做的事情的解决方案,而且我几乎到了必须询问是否可能的地步。

我正在使用 Xamarin Studio 开发 iOS 应用。我有几个不同的屏幕设置为 UIViewControllers,它们运行良好。然而,这款应用的核心是一款游戏,我想使用 Monogame,因为我以前使用过它并喜欢使用它。

基本上,我必须从 UIViewController 切换到 Game 类。我可以通过简单地创建一个新的 Game 对象并调用 Run() 来做到这一点,但我不知道如何在需要时退出游戏并将控制权返回给 UIViewController。

有人在应用程序中这样做过吗?我已经尝试了所有我能想到的方法,但似乎没有任何效果。甚至可能吗?还是我需要重做它,以便 Monogame 处理所有事情,甚至是应用程序中不属于实际游戏的所有其他内容?

谢谢!

【问题讨论】:

  • 我不知道你到底想做什么,但你考虑过在你的游戏类中注入一个接口吗?
  • 我有一个 TabController。其中一个游戏是“游戏”标签。单击该选项卡后,有几个选项。其中一个是一个按钮,“新游戏”,我想启动一个游戏对象。游戏结束后,我想返回用户所在的 Game 选项卡,并结束 Game 对象。

标签: ios xamarin.ios xamarin monogame


【解决方案1】:

我觉得有几个hacky方法可以在不修改MonoGame的情况下工作。

第一个选项:

  1. 当您的应用启动时,像普通 MonoGame 游戏一样启动您的 Game 类
  2. 在游戏顶部以模态方式显示控制器
  3. 要返回游戏,请关闭您的模态控制器

例如,显示一个控制器:

var gameController = game.Services.GetService(typeof(UIViewController)) as UIViewController;
gameController.PresentViewController(new YourController(), true, null);

然后你可以调用DismissViewController 来隐藏它。我用它来实现 Game Center 的东西。

遗憾的是,如果您想在 UIKit 控制器之后显示您的 MonoGame 游戏,您将不得不修改 MonoGame 的工作方式。

另一个选择基本上是在 MonoGame 的视图顶部添加一个UIView。像这样的:

var gameController = game.Services.GetService(typeof(UIViewController)) as UIViewController;
var view = new YourView();
gameController.View.AddSubview(view);

如果您选择这条路线,则需要添加一些逻辑来暂停游戏。我之前在 iAd 等方面使用过此选项。您也可以使用其他控制器的视图执行此操作,例如上面的选项卡控制器示例。

【讨论】:

  • 您好,抱歉回复延迟。我将不得不尝试你的方式,因为我无法首先使用 UIKit 让它工作,然后将 MonoGame 的东西洒进去。不过我确实有一个问题,这样做是如何影响记忆的?这条路是不是很坑了?
  • 应该没问题。当不再使用 UIKit 的东西时,请确保 dispose 和 removefromsuperview 。
  • 这个答案对你有用吗?您可能会花时间标记为答案,或添加新评论。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-28
  • 2013-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-02
相关资源
最近更新 更多