Я работаю над игрой, и мы храним информацию об уровне в формате JSON. Эти уровни довольно велики, поэтому мы перешли к простому хранению их в простом C#:
Пример:
private OurObject Autogenerated_Object1()
{
return new OurObject { Name = "Object1", X = 1, Y = 2, Width = 200, Height = 100 };
}
За исключением того, что эти методы очень большие и имеют вложенные списки/словари других объектов и т. д.
Это ускорило время загрузки уровня с 2- от 3 секунд до долей секунды (в Windows). Размер наших данных также значительно меньше, поскольку скомпилированный IL по сравнению с JSON.
Проблема в том, что когда мы скомпилируем их в MonoDevelop для MonoTouch, мы получим:
mtouch завершил работу с кодом 1
При включенном -v -v -v
мы можем увидеть ошибку :
MONO_PATH=/Users/jonathanpeppers/Desktop/DrawAStickman/Game/Code/iOS/DrawAStickman.iPhone/bin/iPhone/Release/DrawAStickmaniPhone.app /Developer/MonoTouch/usr/bin/arm-darwin-mono --aot=mtriple=armv7-darwin,full,static,asmonly,nodebug,outfile=/var/folders/4s/lcvdj54x0g72nrsw9vzq6nm80000gn/T/tmp54777849.tmp/monotouch.dll.7.s "/Users/jonathanpeppers/Desktop/DrawAStickman/Game/Code/iOS/DrawAStickman.iPhone/bin/iPhone/Release/DrawAStickmaniPhone.app/monotouch.dll"
AOT Compilation exited with code 134, command:
MONO_PATH=/Users/jonathanpeppers/Desktop/DrawAStickman/Game/Code/iOS/DrawAStickman.iPhone/bin/iPhone/Release/DrawAStickmaniPhone.app /Developer/MonoTouch/usr/bin/arm-darwin-mono --aot=mtriple=armv7-darwin,full,static,asmonly,nodebug,outfile=/var/folders/4s/lcvdj54x0g72nrsw9vzq6nm80000gn/T/tmp54777849.tmp/DrawAStickmanCore.dll.7.s "/Users/jonathanpeppers/Desktop/DrawAStickman/Game/Code/iOS/DrawAStickman.iPhone/bin/iPhone/Release/DrawAStickmaniPhone.app/DrawAStickmanCore.dll"
Mono Ahead of Time compiler - compiling assembly /Users/jonathanpeppers/Desktop/DrawAStickman/Game/Code/iOS/DrawAStickman.iPhone/bin/iPhone/Release/DrawAStickmaniPhone.app/DrawAStickmanCore.dll
* Assertion: should not be reached at ../../../../../mono/mono/mini/mini-arm.c:2758
Есть ли ограничение на количество строк в методе при компиляции для AOT? Есть ли какой-то аргумент, который мы можем передать mtouch
, чтобы исправить это? Некоторые файлы работают нормально, но один, в частности, который вызывает ошибку, имеет метод 3000 строк. Компиляция для симулятора работает нормально несмотря ни на что.
Это все еще эксперимент, так что мы понимаем, что это довольно сумасшедшая ситуация.