Я недавно установил последние версии OSX, Xcode и Xamarin Monotouch на свое оборудование для разработки и не могу заставить простейший пример Monogame работать правильно.
Это пример с прыгающим ящиком, и он падает при запуске приложения при первой инициализации структуры Color с A = 255:
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 для развертывания по сети, и в свойствах проекта я не вижу никаких настроек, относящихся к этому.