我最近在我的开发硬件上安装了最新版本的 OSX、Xcode 和 Xamarin Monotouch,但我无法让最简单的 Monogame 示例正常运行。
这是弹跳框示例,它在应用程序启动时崩溃,在第一次初始化 A = 255 的 Color 结构时:
public byte A
{
...
set
{
this._packedValue = (this._packedValue & 0x00ffffff) | ((uint)(value << 24));
}
}
这段代码在 Windows 甚至 iOS 模拟器上都可以正常工作,但是当我在 iPad 1 (iOS 5) 或 iPhone 5 (iOS6) 上运行它时,我得到的异常是“System.OverflowException: Number overflow.”。如果我将代码更改为不会导致溢出:
set
{
var val = (uint)value;
var val2 = val << 24;
this._packedValue = (this._packedValue & 0x00ffffff) | val2;
}
这个问题消失了,但同样的问题也出现在 R、G 和 B 属性中。我的直觉是 Monogame 在编写时并没有考虑到数字溢出,并且可能有无数这样的例子。由于编写了示例代码,这一定是一个“新”问题。
我是否缺少一些编译器开关来强制它忽略数字溢出?我正在使用 Visual Studio 2012 通过网络进行部署,在项目属性下我看不到任何与此相关的设置。