我正在尝试将游戏库移植到 iPhone。与 SDL 不同,此库不会完全控制您的 main() 函数,而是通过您自己的代码中的快速返回函数与它进行通信。因此,例如,明显的伪代码:
int main() {
library_init();
// game init code here
while(we_have_not_quit_the_game) {
library_message_loop();
library_init_render();
// render stuff
library_end_render();
// update game state
}
library_shutdown();
}
iPhone 使这变得困难,因为它要求您调用一个永远不会返回的 UIApplicationMain 函数。在 library_init(); 之后,我根本无法回到用户代码。
我不相信这是必要的——据说有 NSRunLoop 可以用来处理事件。但是,我不知道 UIApplicationMain 是否还有其他重要的功能。(请注意,我没有使用 .nib 文件的计划,这是我发现 UIApplicationMain 所做的唯一其他事情。)
我有三个我能想到的真实想法,但它们都是主要的实施工作,所以我想知道是否有人有这方面的经验,然后再花一天时间尝试注定失败的想法。
- 在 Init 中,生成一个新线程,在该线程中运行 UIApplicationMain。要么跨线程通信所有事件(呃),要么只是让 UIApplicationMain 线程进入睡眠状态并在主线程中使用 CFRunLoop。但是,我听说 UIApplicationMain 不喜欢在不同的线程中运行。
- 完全忽略 UIApplicationMain,只使用 NSRunLoop。我会错过重要的 iPhone 设置吗?谁知道!
- 使用 longjmp() 做一些可怕的事情以在设置后跳出 UIApplicationMain 代码,祈祷它在拆卸期间不会做任何重要的事情。
建议?