私はゲームに取り組んでおり、レベル情報を JSON 形式で保存しています。これらのレベルは非常に大きいため、単純な C# に格納するだけに切り替えました。
- 最上位のメソッドには、レベル/オブジェクトの名前の switch ステートメントがあります
- 標準のプロパティ初期化子を使用してオブジェクト ツリーを「新規作成」する自動生成メソッドがいくつかあります。
例:
private OurObject Autogenerated_Object1()
{
return new OurObject { Name = "Object1", X = 1, Y = 2, Width = 200, Height = 100 };
}
ただし、これらのメソッドは非常に大きく、他のオブジェクトのネストされたリスト/辞書などを持っています。
これにより、レベルのロード時間が 2 ~ 3 秒から 1 秒未満に短縮されました (Windows の場合)。コンパイルされた IL は JSON と比較して、データのサイズもかなり小さくなっています。
問題は、これらを MonoTouch 用に MonoDevelop でコンパイルすると、次のようになることです。
mtouch exited with code 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
これを修正するために渡すことができる引数はありますか? 一部のファイルは正常に動作しますが、特にエラーを引き起こすファイルには 3,000 行のメソッドがあります。シミュレーター用のコンパイルは、何があっても問題なく動作します。
これはまだ実験段階であるため、これは非常にクレイジーな状況であることがわかります。