
[英]How can I add MonoGame.Framework to the Farseer Physics for MonoGame project in Xamarin?
[英]How do i fix a Number Overflow with Monogame and Xamarin?
我最近在开发硬件上安装了最新版本的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在网络上进行部署,在项目属性下,我看不到与此相关的任何设置。
如果我理解问题和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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.