我完成了开发XNA游戏,然后创建了Monogame项目,并在我的设备上进行了测试。现在我做了一些其他的页面,比如" about"页。考虑到我有一个Monogame项目和一个XNA代码,我怎么能去那个页面?特别是在我的游戏中,我创建了一个主菜单,您可以点击" about"按钮并知道是否有人点击过:如何将该事件链接到"转到about.xaml"功能
在XNA内部,更新方法:
if (about_button.IsClicked())
{
// Go to about.xaml
}
我试过了:
if (about_button.IsClicked())
{
((PhoneApplicationFrame)Application.Current.RootVisual).Navigate(new Uri("/About.xaml", UriKind.Relative));
}
但它抛出:System.UnauthorizedAccessException
答案 0 :(得分: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();
因此,如果您使用的是Windows Phone 8项目模板,使用该对象可以轻松告诉应用程序加载xaml视图或游戏视图。
您还可以在this site上查看如何使用WinRT和单一游戏进行操作(Window.Current
是WP和WinRT框架的一部分)。在这里,您将找到如何集成两个框架以使用WinRT xaml视图创建单一游戏:)
有关Window.Current的更多信息,请查看this link。
修改强>
如果你使用monogame作为windows phone模板,你的项目中应该已经存在一个XAML页面,用于加载游戏本身,以及用于视频和声音播放的媒体元素。
该页面名为" GamePage.xaml",您可以将其用于导航目的。
此信息取自" Windows 8 and Windows Phone 8 Game Development"由Adam Dawes撰写的书(第13章)。
对于Windows Phone项目,GamePage实现为 一个普通的页面。 [...] 在Windows Phone页面中是一个完整页面 网格控制,其中是另一种全屏控制类型 DrawingSurface。这是DirectX可以使用的一种控件 将图形渲染到Windows Phone页面。我们的XAML内容也可以 放入网格。 MediaElement控件存在于 网格也是。 MonoGame使用它来进行一些音频播放 功能。
在两个平台上,XAML和DirectX的设计方式 interactive是首先处理DirectX渲染。一旦这个 已经完成,XAML渲染器然后控制并添加它 在呈现最终呈现页面之前,将内容作为第二步 给用户。 因此,XAML内容将始终显示在前面 MonoGame呈现的任何图形。这确保了任何XAML控件 我们用作我们的用户界面(用于控制按钮,文本显示和 所以)在游戏画面前会显得畅通无阻。
XAML渲染仍然在控件中采用任何透明度 考虑到,所以很可能有控制 部分透明或使用alpha阴影。这些将融入其中 MonoGame图形的正面,正如您所期望的那样。
考虑到这一点,你应该能够从你的游戏类(monogame)中抛出一个事件,xaml页面可以自我控制,然后在捕获时,渲染你的xaml页面(也许用户控件会更明智因为你不会离开主游戏页面。)
希望这可以帮助您解决问题。
答案 1 :(得分:1)
尝试在游戏页面中创建一个框架
public static Frame RootFrame { get; private set; }
然后在你的点击事件中放入这些行
RootFrame = new Frame();
RootFrame.Navigate(typeof(about));
这样做了吗?
答案 2 :(得分:0)
您收到该错误,因为必须从UI线程调用,如下所示:
Deployment.Current.Dispatcher.BeginInvoke(() =>
(App.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri("/Pages/MenuPage.xaml", UriKind.Relative)));
此外,请确保在卸载游戏xaml页面时丢弃游戏对象。您可以通过订阅Unloaded
的{{1}}事件并在游戏对象上调用GamePage
来实现此目的。见下文:
Dispose