Ich arbeite an einem Spiel, und wir haben unsere Level-Informationen im JSON-Format gespeichert. Diese Ebenen sind recht groß, so wechselten wir nur sie einfach in C# zu speichern:MonoTouch AOT Compiler - große Methoden fehlschlagen
- Ein Top-Level-Methode hat eine Switch-Anweisung für den Namen der Ebene/Objekt
- Es gibt mehrere automatisch generierte Methoden, die "new up" unser Objektbaum mit Standard-Eigenschaft inititalizers
Beispiel:
private OurObject Autogenerated_Object1()
{
return new OurObject { Name = "Object1", X = 1, Y = 2, Width = 200, Height = 100 };
}
Außer diesen Methoden sind sehr groß und haben Listen verschachtelt/Diktion Widgets anderer Objekte usw.
Dies hat die Ladezeit eines Levels von 2-3 Sekunden auf Bruchteile von Sekunden (unter Windows) beschleunigt. Die Größe unserer Daten ist auch wesentlich geringer, als bei kompilierter IL im Vergleich zu JSON.
Das Problem ist, wenn wir diese in MonoDevelop für Monotouch kompilieren, erhalten wir:
mtouch exited with code 1
Mit -v -v -v
eingeschaltet, wir den Fehler sehen:
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
Gibt es ein Limit auf die Anzahl der Zeilen in einer Methode, wenn für AOT kompiliert? Gibt es ein Argument, das wir an mtouch
weitergeben können, um das zu beheben? Einige Dateien funktionieren gut, aber eine, die den Fehler verursacht, hat eine 3000-Zeilen-Methode. Kompilieren für den Simulator funktioniert gut, egal was.
Dies ist immer noch ein Experiment, also erkennen wir, dass dies eine ziemlich verrückte Situation ist.
Funktioniert es mit kleinen Pegeln? –
Ja, funktioniert mit kleineren Ebenen. Sobald ich einen bestimmten Busch oder Baum hinzufüge, beginnt der Fehler - und der Simulator funktioniert gut. – jonathanpeppers
Bitte füllen Sie einen Fehlerbericht :) – poupou