Estoy trabajando en un juego y hemos estado almacenando nuestra información de nivel en formato JSON. Estos niveles son bastante grandes, por lo que cambió a simplemente almacenarlos en C plano #:Compilador MonoTouch AOT: los métodos grandes fallan
- Un método de nivel superior tiene una sentencia switch para el nombre del nivel/objeto
- Existen varios métodos generadas automáticamente que "nuevo hasta" nuestro árbol de objetos con inititalizers propiedad estándar
Ejemplo:
private OurObject Autogenerated_Object1()
{
return new OurObject { Name = "Object1", X = 1, Y = 2, Width = 200, Height = 100 };
}
Excepto estos métodos son muy grandes y tienen listas anidadas/dicción aries de otros objetos, etc.
Esto ha acelerado el tiempo de carga de un nivel de 2-3 segundos a fracciones de segundo (en Windows). El tamaño de nuestros datos también es considerablemente más pequeño, como IL compilado en comparación con JSON.
El problema es cuando compilamos estos en MonoDevelop para MonoTouch, obtenemos:
mtouch exited with code 1
Con -v -v -v
encendido, podemos ver el error:
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
¿Hay un límite al número de líneas en un método, al compilar para AOT? ¿Hay algún argumento que podamos pasar al mtouch
para arreglar esto? Algunos archivos funcionan bien, pero uno en particular que causa el error tiene un método de 3.000 líneas. Compilar para el simulador funciona bien sin importar qué.
Esto sigue siendo un experimento, así que nos damos cuenta de que esta es una situación bastante loca.
¿Funciona con niveles pequeños? –
Sí, funciona bien con niveles más pequeños. Tan pronto como agrego un arbusto o árbol en particular, comienza el problema, y el simulador funciona bien. – jonathanpeppers
Complete un informe de error :) – poupou