继my last question关于优化之后,我发现更容易相信我无法进一步优化我的代码以在游戏中获得更好的性能。
所以现在我有了一个新想法,并想知道它是否可能或甚至值得实施。由于性能的明显瓶颈来自基于.net的物理处理,我想,是否有可能适应基于Objective-c或C ++的物理引擎(如box2D)与Mono进行交互?
例如在Mono代码中,我会做类似CreateBox()的操作,但在幕后,该框是在Obj-C / C ++中创建的。或者当我进行物理更新时,我只需在Mono中调用该函数,然后在Obj-C / C ++中进行主要工作
如果可以,有人能指出我正确的方向开始吗?
答案 0 :(得分:3)
是
通过C API和Objective-C API,有两种方法可以做到这一点。
使用C API,在C(或带有extern "C"
的C ++)中编写本机代码,将代码编译为静态库link your MonoTouch app against the static library,然后使用P / Invoke访问C函数。 但是,与需要指定库名称的“普通”P / Invoke不同,您需要指定"__Internal"
作为库名:
[DllImport ("__Internal")]
static extern void MethodInStaticLibrary ();
This same technique is used by MonoTouch to call from e.g. System.dll
into the MonoTouch runtime.
使用Objective-C是相同但又不同的。您需要一个静态库导出Objective-C ABI,链接静态库,然后provide an API binding for your Objective-C library,而不是静态库导出C ABI。