1

继上一个关于优化的问题之后,我发现更容易相信根本不可能进一步优化我的代码以在我的游戏中获得更好的性能。

所以现在我有了一个新想法,想知道它是否可能甚至值得实施。由于性能的明显瓶颈来自基于 .net 的物理处理,我在想,是否有可能适合基于 Objective-C 或 C++ 的物理引擎(例如 box2D)与 Mono 交互?

例如,在 Mono 代码中,我会执行 CreateBox() 之类的操作,但在幕后,盒子是在 Obj-C/C++ 中创建的。或者当我进行物理更新时,我只需在 Mono 中调用该函数,而首当其冲的工作发生在 Obj-C/C++

如果这是可能的,任何人都可以指出我正确的开始方向吗?

4

1 回答 1

3

是的。

有两种方法可以做到这一点,通过 C API 和 Objective-C API。

使用 C API,用 C(或 C++ extern "C")编写您的本机代码,将您的代码编译到静态库中,将 MonoTouch 应用程序与静态库链接,然后使用 P/Invoke 访问您的 C 函数。但是,与需要指定库名称的“普通”P/Invoke 不同,您需要指定"__Internal"为库名称:

[DllImport ("__Internal")]
static extern void MethodInStaticLibrary ();

MonoTouch 使用相同的技术从例如调用System.dll到 MonoTouch 运行时。

使用 Objective-C 是相同但不同的。您需要一个导出 Objective-C ABI 的静态库,而不是导出 C ABI 的静态库,链接到静态库,然后为您的 Objective-C 库提供 API 绑定

于 2011-07-07T14:03:52.603 回答