我正在开发一款游戏,我们一直在以JSON格式存储我们的关卡信息。由于这些关卡信息相当庞大,因此我们转而将它们存储为纯C#代码:
- 顶层方法有一个switch语句用于关卡/对象的名称
- 有几个自动生成的方法使用标准属性初始化程序“new up”我们的对象树
例如:
private OurObject Autogenerated_Object1()
{
return new OurObject { Name = "Object1", X = 1, Y = 2, Width = 200, Height = 100 };
}
除非这些方法非常大且嵌套有其他对象的列表/字典等。
这将把加载级别的时间从2-3秒加速到几分之一秒(在Windows上)。 我们的数据大小也相对较小,因为与JSON相比,编译的IL更小。
问题是当我们在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行的方法,导致出现错误。无论如何,在模拟器上编译都可以正常工作。
由于这仍然是一个实验阶段,所以我们意识到这是一个相当疯狂的情况。