我最近在开发硬件上安装了最新版本的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:数字溢出”。 如果我更改代码不会导致溢出:

set
{
    var val = (uint)value;

    var val2 = val << 24;

    this._packedValue = (this._packedValue & 0x00ffffff) | val2;
}

这个问题消失了,但是R,G和B属性也表现出相同的问题。 我的直觉是,Monogame在编写时并没有考虑到数字溢出的问题,并且可能有无数的示例。 自编写示例代码以来,这肯定是一个“新”问题。

我是否缺少某些编译器开关来强制其忽略数字溢出? 我正在使用Visual Studio 2012在网络上进行部署,在项目属性下,我看不到与此相关的任何设置。

===============>>#1 票数:0

如果我理解问题和msdn文档,则可以在unchecked块内执行整个操作。

set
{
    unchecked
    {
        this._packedValue = (this._packedValue & 0x00ffffff) | ((uint)(value << 24));
    }
}

但是,这可能会导致意想不到的后果(负数,但是由于您使用的是无符号,所以我不确定是否从0开始还是仍然抛出异常),而且我从未亲自使用过。

参考可以在这里找到: http : //msdn.microsoft.com/zh-cn/library/a569z7k8(v=vs.110).aspx

  ask by Jim Noble translate from so

未解决问题?本站智能推荐: