为了让MonoGame编写的代码能跨平台编译运行要注意资源文件(Content目录中文件)的命名,错误的命名会出现意想不到,甚至莫名其妙的错误。比如名字带了特殊字符“+”号就会导致在iOS平台出现The “CollectBundleResources” task failed unexpectedly.错误。在windows平台却没有问题。

MonoGame开发手机游戏最大的缺陷是安装包太大。小游戏打包后的尺寸基本都在20MB以上。造成包大的原因是资源文件。比如:一个png文件编译成xnb以后体积会增大好几倍。所以为了压缩安装包的尺寸可以放弃使用xnb作为资源文件,可以直接使用png文件。方法是用TitleContainer代替Content加载资源。

iOS平台使用Microsoft.Devices.Sensors.Accelerometer制作重力感应游戏要注意plist文件中屏幕方向的设置。如果游戏使用了上下左右四个方向重力加速度,那么取消plist文件中任何一个方向会造成游戏闪退。Debug过程中很难找到崩溃原因。所以要注意这个细节。

MonoGame的价值在于可以将原XNA游戏移植到iOS和Android平台。移植基础是Xamarin。在Xamarin.iOS缺少System.IO.IsolatedStorage.IsolatedStorageSettings类。这个类通常用来存储游戏数据状态,非常重要。下面提供IsolatedStorageSettings在iOS平台的实现代码:

MonoGame 3.5.1在iOS,Windows Phone(其他平台未测试)中使用Mouse.GetState()方式获取坐标点始终是0。这是MonoGame的一个Bug。
解决办法:
1.等官方修复,请关注MonoGame最新进展 https://github.com/MonoGame/MonoGame
2.自己下载源码修复
3.本站提供临时解决办法: