如何在Windows Phone 8项目中使用Monogame浏览xaml页面?

Fra*_*zzi 5 c# xna monogame windows-phone-8

我完成了开发XNA游戏,然后创建了Monogame项目,并在我的设备上进行了测试.现在我做了一些其他页面,例如"关于"页面.考虑到我有一个Monogame项目和一个XNA代码,我怎么能去那个页面?特别是在我的游戏中,我创建了一个主菜单,您可以在其中单击"关于"按钮,并知道是否有人点击过:如何将该事件链接到"转到about.xaml"功能?

在XNA内部,更新方法:

if (about_button.IsClicked())
{
    // Go to about.xaml
}
Run Code Online (Sandbox Code Playgroud)

我试过了:

   if (about_button.IsClicked())
    {
         ((PhoneApplicationFrame)Application.Current.RootVisual).Navigate(new Uri("/About.xaml", UriKind.Relative));
    }
Run Code Online (Sandbox Code Playgroud)

但它抛出:System.UnauthorizedAccessException

Nah*_*nni 1

我自己没有尝试过,但是 WP 框架有一个Window.Current.Content可以用来加载不同视图的对象。

例如:

// Create a Frame to act navigation context and navigate to the first page
var rootFrame = new Frame();
rootFrame.Navigate(typeof(BlankPage));

// Place the frame in the current Window and ensure that it is active
Window.Current.Content = rootFrame;
Window.Current.Activate();
Run Code Online (Sandbox Code Playgroud)

因此,如果您使用的是 Windows Phone 8 项目模板,则通过该对象,您可以轻松地告诉应用程序加载 xaml 视图或游戏视图。

您还可以在此站点上查看如何使用 WinRT 和 monogame 进行操作(这Window.Current是 WP 和 WinRT 框架的一部分)。在这里,您将了解如何集成这两个框架,以便使用 WinRT xaml 视图创建单一游戏:)

有关 Window.Current 的更多信息,请查看此链接

编辑

如果您使用 Windows Phone 模板的单一游戏,则您的项目中应该已经存在一个 XAML 页面,用于加载游戏本身以及用于视频和声音播放的媒体元素。

该页面称为“GamePage.xaml”,您可以将其用于导航目的。

此信息取自Adam Dawes 撰写的“ Windows 8 和 Windows Phone 8 游戏开发”一书(第 13 章)。

在 Windows Phone 项目中,GamePage 被实现为普通页面。[...] Windows Phone 页面中有一个全页 Grid 控件,其中有另一个 DrawingSurface 类型的全屏控件。这是 DirectX 可用于将图形渲染到 Windows Phone 页面的一种控件。我们的 XAML 内容也可以放入网格中。MediaElement 控件也存在于网格中。MonoGame 将其用于某些音频播放功能。

在这两个平台上,XAML 和 DirectX 交互的设计方式是首先处理 DirectX 渲染。完成此操作后,XAML 呈现器将获得控制权并添加其内容作为第二步,然后将最终呈现的页面呈现给用户。因此,XAML 内容将始终出现在 MonoGame 渲染的任何图形的前面。这可确保我们用作用户界面的任何 XAML 控件(用于控制按钮、文本显示等)都将无障碍地显示在游戏图形前面。

XAML 呈现仍然会考虑控件内的任何透明度,因此很可能会出现部分透明或使用 alpha 着色的控件。正如您所期望的那样,它们将在 MonoGame 图形前面混合。

考虑到这一点,您应该能够从您的游戏类(monogame)抛出一个事件,xaml 页面可以订阅它,然后在捕获时呈现您的 xaml 页面(也许用户控件会更明智,因为您赢了不要离开游戏主页面)。

希望这能帮助您解决问题。