上一篇我谈到如何将《选老婆》发给朋友玩,这篇我来介绍一下如何将《选老婆》移植到通用Windows平台(UWP)。XNA本身并没有跨平台的能力,将游戏运行到其他平台必须安装MonoGame或者FNA,如何安装MonoGame?请点击

首先,选中【SelectWife】解决方案,点击右键【添加】【新建项目】

image

选择【Visual C#】【MonoGame】【MonoGame Shared Project】名称命名为【SelectWife.Shared】点击【确定】

image

点开【SelectWife.XNA】项目,将【GameMain.cs】和【GameScence.cs】两个文件复制到【SelectWife.Shared】项目中

image

【MonoGame】选择【MonoGame Windows 10 Universal (XAML)Project】名称命名为【SelectWife.UWP】【 确定】

image

最低版本选择10240,点击【确定】

image

选择【SelectWife.UWP】项目的引用,点击右键【添加引用】

image

【共享项目】,勾选【SelectWife.Shared】前面的勾,点击【确定】

image

删除【SelectWife.UWP】和【SelectWife.Shared】项目中的Game1.cs文件

image

 

分别打开【SelectWife.Shared】项目中的GameMain.cs和GameScence.cs文件,将名称空间【SelectWife.XNA】改为【SelectWife】

image image

展开【SelectWife.UWP】项目的GamePage.xaml,双击打开GamePage.xaml.cs

image

把Game1改为GameMain

image

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409

namespace SelectWife.UWP
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class GamePage : Page
    {
    readonly GameMain _game;

    public GamePage()
        {
            this.InitializeComponent();

      // Create the game.
      var launchArguments = string.Empty;
            _game = MonoGame.Framework.XamlGame<GameMain>.Create(launchArguments, Window.Current.CoreWindow, swapChainPanel);
        }
    }
}

 

选择【SelectWife.UWP】项目的【Content】文件夹,点击右键点击【在文件资源管理器中打开文件夹】

image

这时候你会看到一个【Content.mgcb】文件,双击打开它

image

选中左侧【Content】点击鼠标右键【Add】【Existing Item】

image

找到【SelectWife.XNAContent】项目所在目录,选中所有文件(但不包括【bin】【object】目录和【SelectWife.XNAContent.contentproj】)

image

由于我只需要一份资源文件的拷贝(方便以后修改一次多平台共享)所以选择【Add a link to the file】(也可以选择copy the file to the directory)勾选【use the same action for all the selected files】点击【Add】

image

找到【Click.mp3】,默认状态下Content.mgcb会将mp3文件编译为Song,但在代码中使用的是Sound Effect,所以将它的Processor改为【Sound Effect – MonoGame】

image

点击工具栏的保存

image

点击菜单栏【Build】【Rebuild】

image

等待完成

image

这里出现最常见的错误是AboutFont.spritefont无法Build。解决办法是打开电脑C盘C:\Windows\Fonts,搜索【华文隶书】

image

将【华为隶书 常规】复制到桌面,选中它点击鼠标右键【为所有用户安装】

image

重新点击菜单栏【Build】【Rebuild】即可!

选择【SelectWife.UWP】点击右键【设为启动项目】

image

点击【本地计算机】

image

运行效果如下图:

这时候你会发现有两个问题:1.鼠标同时显示了默认鼠标。2.窗口不是480×800

首先解决鼠标问题,找到【SelectWife.Shared】项目中的GameMain.cs文件,在GameMain构造函数中加入

IsMouseVisible = false;

 

image

理想状态下默认鼠标肯定已经看不到了,只留下自定义鼠标。但事实并非如此。这是MonoGame 3.7.1的一个bug。解决办法使用MonoGame3.5.1。这是一个比较稳定的版本!

使用Nuget降级3.5.1解决鼠标问题

选择【SelectWife.UWP】项目的引用,点击右键【管理NuGet程序包】

image

搜索【MonoGame.Framework.WindowsUniversal】,版本选择【3.5.1.1679】点击【安装】

image

点击【确定】

image

重复上诉过程分别搜索

【SharpDX】

【SharpDX.Direct2D1】

【SharpDX.Direct3D11】

【SharpDX.MediaFoundation】

【SharpDX.XAudio2】

版本通通选择【3.0.0】点击【安装】。安装后点击【已安装】选项卡如图显示:

image

点击【本地计算机】运行

这时候默认白色鼠标已经不见了!

下面来实现窗口480×800。打开【SelectWife.UWP】项目的【GamePage.xaml.cs】文件,在GamePage()构造函数中输入:

this.SizeChanged += GamePage_SizeChanged;

以及方法

private void GamePage_SizeChanged(object sender, SizeChangedEventArgs e)
        {
            Size desiredSize = new Size { Width = 480, Height = 800 };
            ApplicationView.GetForCurrentView().TryResizeView(desiredSize);
        }

顶部加入

using Windows.UI.ViewManagement;

 

点击【本地计算机】,运行。

image

image

由于UWP的问题,无法固定窗口大小。这是一种强制窗口大小的方法。并不是很好!

修改游戏标题

打开【SelectWife.UWP】项目的Package.appxmanifest文件

image

显示名称改为【选老婆】即可。

image

打包发布

选中【SelectWife.UWP】项目中的Package.appxmanifest点击右键【打开方式】

image

选择【XML文本编辑器】,点击【确定】

image

找到【Assets\Logo.png】改为【Assets\Square150x150Logo.png】,【Assets\SmallLogo.png】改为【Assets\Square44x44Logo.png】【SplashScreen.png】改为【Assets\Wide310x150Logo.png】保存。如下图:

image

image

选中【SelectWife.UWP】项目中的【Assets】文件夹,点击右键点击【在文件资源管理器中打开文件夹】

image

打开目录后,将Square150x150Logo.scale-200.png替换成【选老婆】的游戏图标,尺寸必须是300×300

将Square44x44Logo.scale-200.png也替换为【选老婆】的图标,尺寸必须是88×88

将Wide310x150Logo.scale-200.png也替换为【选老婆】的图片,尺寸必须为620×300

 

image

选中【SelectWife.UWP】点击右键【应用商店】【创建应用程序包】

image

本文假设你没有注册微软开发者账号,选择【我想要创建旁加载包】【下一步】

image

取消自动递增,只勾选【x86】和【x64】,点击【创建】等待完成。

image

点击【输出位置】下面的蓝色路径

image

由于UWP必须发布到微软商店,所以这种旁加载打包只能生成测试文件夹,

image

安装

打开【SelectWife.UWP_1.0.0.0_Debug_Test】目录,选中【Add-AppDevPackage.ps1】点击右键【使用PowerShell运行】

image

输入【Y】回车,等待完成。

image

安装成功

image

点击运行,如下图:

 

任务栏图标

这时候你会发现任务栏上的游戏图标还未修改,image ,只需要替换Assets里的【Square44x44Logo.targetsize-24_altform-unplated.png】即可!但要求图片必须是24×24

image

运行后图标已经变了!

image

 

重新打包,如果出现下图错误:

image

打开Assets文件夹修改【Wide310x150Logo.scale-200.png】由原来的620×300改为1240×600

 

完整代码下载地址:https://github.com/chengcong/SelectWife

由于微软已经停止了Windows Phone的支持,所以UWP就不介绍Windows Phone了。敬请谅解!