Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在WindowsPhone8项目中使用Monogame浏览xaml页面?_C#_Windows Phone 8_Xna_Monogame - Fatal编程技术网

C# 如何在WindowsPhone8项目中使用Monogame浏览xaml页面?

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 } 我

我完成了XNA游戏的开发,然后创建了Monogame项目,并在我的设备上进行了测试。现在我制作了一些其他页面,比如“关于”页面。考虑到我有一个Monogame项目和一个XNA代码,我怎么能进入那个页面?特别是在我的游戏中,我制作了一个主菜单,你可以点击“about”按钮,知道是否有人点击了:我如何将该事件链接到“go to 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

我自己还没有尝试过,但是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用新信息编辑了我的答案。