C# 如何在WindowsPhone8项目中使用Monogame浏览xaml页面?
我完成了XNA游戏的开发,然后创建了Monogame项目,并在我的设备上进行了测试。现在我制作了一些其他页面,比如“关于”页面。考虑到我有一个Monogame项目和一个XNA代码,我怎么能进入那个页面?特别是在我的游戏中,我制作了一个主菜单,你可以点击“about”按钮,知道是否有人点击了:我如何将该事件链接到“go to about.xaml”函数 在XNA内部,更新方法:C# 如何在WindowsPhone8项目中使用Monogame浏览xaml页面?,c#,windows-phone-8,xna,monogame,C#,Windows Phone 8,Xna,Monogame,我完成了XNA游戏的开发,然后创建了Monogame项目,并在我的设备上进行了测试。现在我制作了一些其他页面,比如“关于”页面。考虑到我有一个Monogame项目和一个XNA代码,我怎么能进入那个页面?特别是在我的游戏中,我制作了一个主菜单,你可以点击“about”按钮,知道是否有人点击了:我如何将该事件链接到“go to about.xaml”函数 在XNA内部,更新方法: if (about_button.IsClicked()) { // Go to about.xaml } 我
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我自己还没有尝试过,但是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();
因此,如果您使用的是WindowsPhone8项目模板,使用该对象,您可以很容易地告诉应用程序加载xaml视图或游戏视图
您还可以检查如何使用WinRT和monogame(在窗口中。当前是WP和WinRT框架的一部分)。在这里,您将了解如何集成这两个框架,以便使用WinRT xaml视图创建单游戏:)
有关当前窗口的详细信息,请选中
编辑
如果使用的是monogame for windows phone模板,则项目中应该已经存在用于加载游戏本身的XAML页面,以及用于视频和声音播放的媒体元素
该页面称为“GamePage.xaml”,您可以将其用于导航目的
此信息摘自亚当·道斯(Adam Dawes)所著的“”一书(第13章)
在Windows Phone项目中,GamePage实现为
正常页面。[...]
在Windows Phone页面中是一个完整的页面
网格控件,其中是另一个类型的全屏控件
绘图表面。这是一种DirectX可以用来
将图形呈现到Windows Phone页面。我们的XAML内容也可以是
放入网格中。中存在MediaElement控件
网格也是。MonoGame将其用于部分音频播放
功能
在这两种平台上,XAML和DirectX的设计方式
交互是指首先处理DirectX渲染。一旦这个
完成后,XAML渲染器将控制并添加其
在呈现最终呈现页面之前,将内容作为第二步
给用户因此,XAML内容将始终显示在
MonoGame渲染的任何图形。这确保了任何XAML控件
我们将其用作用户界面(用于控制按钮、文本显示和
以此类推)将在游戏图形前显示通畅
XAML渲染仍然在控件中采用任何透明度
考虑到这一点,所以很可能有
部分透明或使用alpha着色的。这些会混合在一起的
前面的单游戏图形,因为你会期待他们
考虑到这一点,您应该能够从您的游戏类(monogame)中抛出一个事件,xaml页面可以将自己引用到它,然后在捕获时呈现您的xaml页面(可能用户控件会更明智,因为您不会离开主游戏页面)
希望这能帮助您解决问题。尝试在游戏页面中创建一个框架
public static Frame RootFrame { get; private set; }
然后在单击事件中放置以下行
RootFrame = new Frame();
RootFrame.Navigate(typeof(about));
这是否有效?您收到该错误,因为必须从UI线程进行调用,如下所示:
Deployment.Current.Dispatcher.BeginInvoke(() =>
(App.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri("/Pages/MenuPage.xaml", UriKind.Relative)));
另外,请确保在卸载游戏xaml页面时处置游戏对象。您可以通过订阅GamePage
的unload
事件并在游戏对象上调用Dispose
来实现这一点。见下文:
public partial class GamePage : PhoneApplicationPage
{
private LoonieGame _game;
public GamePage()
{
InitializeComponent();
_game = XamlGame<LoonieGame>.Create("", this);
this.Unloaded += GamePage_Unloaded;
}
void GamePage_Unloaded(object sender, RoutedEventArgs e)
{
Deployment.Current.Dispatcher.BeginInvoke(() => _game.Dispose());
}
}
公共部分类游戏页面:PhoneApplicationPage
{
私人游戏;
公共游戏网页()
{
初始化组件();
_game=XamlGame.Create(“,this”);
this.unload+=GamePage_unload;
}
已卸载的无效游戏页面(对象发送器,路由目标e)
{
Deployment.Current.Dispatcher.BeginInvoke(()=>_game.Dispose());
}
}
我使用的不是Windows Phone 8项目模板,而是Monogame项目模板。它找不到Windows。当前@misiMe用新信息编辑了我的答案。