C#开发跨平台游戏——使用MonoGame将《选老婆》移植到UWP平台
上一篇我谈到如何将《选老婆》发给朋友玩,这篇我来介绍一下如何将《选老婆》移植到通用Windows平台(UWP)。XNA本身并没有跨平台的能力,将游戏运行到其他平台必须安装MonoGame或者FNA,如何安装MonoGame?请点击。
首先,选中【SelectWife】解决方案,点击右键【添加】【新建项目】
选择【Visual C#】【MonoGame】【MonoGame Shared Project】名称命名为【SelectWife.Shared】点击【确定】
点开【SelectWife.XNA】项目,将【GameMain.cs】和【GameScence.cs】两个文件复制到【SelectWife.Shared】项目中
【MonoGame】选择【MonoGame Windows 10 Universal (XAML)Project】名称命名为【SelectWife.UWP】【 确定】
最低版本选择10240,点击【确定】
选择【SelectWife.UWP】项目的引用,点击右键【添加引用】
【共享项目】,勾选【SelectWife.Shared】前面的勾,点击【确定】
删除【SelectWife.UWP】和【SelectWife.Shared】项目中的Game1.cs文件
分别打开【SelectWife.Shared】项目中的GameMain.cs和GameScence.cs文件,将名称空间【SelectWife.XNA】改为【SelectWife】
展开【SelectWife.UWP】项目的GamePage.xaml,双击打开GamePage.xaml.cs
把Game1改为GameMain
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】文件夹,点击右键点击【在文件资源管理器中打开文件夹】
这时候你会看到一个【Content.mgcb】文件,双击打开它
选中左侧【Content】点击鼠标右键【Add】【Existing Item】
找到【SelectWife.XNAContent】项目所在目录,选中所有文件(但不包括【bin】【object】目录和【SelectWife.XNAContent.contentproj】)
由于我只需要一份资源文件的拷贝(方便以后修改一次多平台共享)所以选择【Add a link to the file】(也可以选择copy the file to the directory)勾选【use the same action for all the selected files】点击【Add】
找到【Click.mp3】,默认状态下Content.mgcb会将mp3文件编译为Song,但在代码中使用的是Sound Effect,所以将它的Processor改为【Sound Effect – MonoGame】
点击工具栏的保存
点击菜单栏【Build】【Rebuild】
等待完成
这里出现最常见的错误是AboutFont.spritefont无法Build。解决办法是打开电脑C盘C:\Windows\Fonts,搜索【华文隶书】
将【华为隶书 常规】复制到桌面,选中它点击鼠标右键【为所有用户安装】
重新点击菜单栏【Build】【Rebuild】即可!
选择【SelectWife.UWP】点击右键【设为启动项目】
点击【本地计算机】
运行效果如下图:
这时候你会发现有两个问题:1.鼠标同时显示了默认鼠标。2.窗口不是480×800
首先解决鼠标问题,找到【SelectWife.Shared】项目中的GameMain.cs文件,在GameMain构造函数中加入
IsMouseVisible = false;
理想状态下默认鼠标肯定已经看不到了,只留下自定义鼠标。但事实并非如此。这是MonoGame 3.7.1的一个bug。解决办法使用MonoGame3.5.1。这是一个比较稳定的版本!
使用Nuget降级3.5.1解决鼠标问题
选择【SelectWife.UWP】项目的引用,点击右键【管理NuGet程序包】
搜索【MonoGame.Framework.WindowsUniversal】,版本选择【3.5.1.1679】点击【安装】
点击【确定】
重复上诉过程分别搜索
【SharpDX】
【SharpDX.Direct2D1】
【SharpDX.Direct3D11】
【SharpDX.MediaFoundation】
【SharpDX.XAudio2】
版本通通选择【3.0.0】点击【安装】。安装后点击【已安装】选项卡如图显示:
点击【本地计算机】运行
这时候默认白色鼠标已经不见了!
下面来实现窗口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;
点击【本地计算机】,运行。
由于UWP的问题,无法固定窗口大小。这是一种强制窗口大小的方法。并不是很好!
修改游戏标题
打开【SelectWife.UWP】项目的Package.appxmanifest文件
显示名称改为【选老婆】即可。
打包发布
选中【SelectWife.UWP】项目中的Package.appxmanifest点击右键【打开方式】
选择【XML文本编辑器】,点击【确定】
找到【Assets\Logo.png】改为【Assets\Square150x150Logo.png】,【Assets\SmallLogo.png】改为【Assets\Square44x44Logo.png】【SplashScreen.png】改为【Assets\Wide310x150Logo.png】保存。如下图:
选中【SelectWife.UWP】项目中的【Assets】文件夹,点击右键点击【在文件资源管理器中打开文件夹】
打开目录后,将Square150x150Logo.scale-200.png替换成【选老婆】的游戏图标,尺寸必须是300×300
将Square44x44Logo.scale-200.png也替换为【选老婆】的图标,尺寸必须是88×88
将Wide310x150Logo.scale-200.png也替换为【选老婆】的图片,尺寸必须为620×300
选中【SelectWife.UWP】点击右键【应用商店】【创建应用程序包】
本文假设你没有注册微软开发者账号,选择【我想要创建旁加载包】【下一步】
取消自动递增,只勾选【x86】和【x64】,点击【创建】等待完成。
点击【输出位置】下面的蓝色路径
由于UWP必须发布到微软商店,所以这种旁加载打包只能生成测试文件夹,
安装
打开【SelectWife.UWP_1.0.0.0_Debug_Test】目录,选中【Add-AppDevPackage.ps1】点击右键【使用PowerShell运行】
输入【Y】回车,等待完成。
安装成功
点击运行,如下图:
任务栏图标
这时候你会发现任务栏上的游戏图标还未修改, ,只需要替换Assets里的【Square44x44Logo.targetsize-24_altform-unplated.png】即可!但要求图片必须是24×24
运行后图标已经变了!
重新打包,如果出现下图错误:
打开Assets文件夹修改【Wide310x150Logo.scale-200.png】由原来的620×300改为1240×600
完整代码下载地址:https://github.com/chengcong/SelectWife
由于微软已经停止了Windows Phone的支持,所以UWP就不介绍Windows Phone了。敬请谅解!