3

Cocos2d 模板和通常的示例项目在 applicationDidFinishLaunching / application:didFinishLaunchingWithOptions: 方法中初始化 cocos openGL ES 视图和其他内容。关于最后一种方法,Apple iOS 编程指南指出:

“使用 OpenGL ES 的应用程序不应使用此方法来准备其绘图环境。相反,它们应将任何 OpenGL ES 绘图调用推迟到 applicationDidBecomeActive: 方法。”

所以,我的问题是,application:didFinishLaunchingWithOptions: 真的是初始化 cocos2d 的合适位置吗?还是我们应该在 applicationDidBecomeActive: 中这样做?

如果您认为 applicationDidBecomeActive: 是可行的方法,那么与后台执行相关的后果是什么?即当应用程序从非活动状态进入前台时,我们应该怎么做才能避免一种双重初始化?

提前致谢

4

1 回答 1

1

好问题……到目前为止,99.9% 的 cocos2d 应用程序都是按照 cocos2d 的方式进行的,我还没有听说过一个问题。

由于 Apple 并没有真正解释为什么这对 OpenGL ES 应用程序特别重要,所以我假设如下:

  • OpenGL ES 应用程序往往需要相对较长的时间来初始化它们的视图。特别是在加载大量资产时。如果时间过长,这可能会导致应用程序被系统杀死。这意味着 Cocos2D 第一个场景应该快速加载,特别是它不应该加载所有游戏资源,除非第一个场景的加载延迟到 applicationDidBecomeActive。后者需要额外检查以确保没有其他场景已经在运行。
  • 应用程序应该在 applicationDidBecomeActive 中执行常见任务。这通常是个好建议,因为现在可以在应用程序暂停时更改某些设置。例如,用户可能会更改设备语言,或进入飞行模式,应用程序需要在再次激活时做出响应。某些更改可能会特别影响 OpenGL ES 应用程序,例如,如果用户将语言环境从英语更改为日语,则重新加载所有位图字体。
于 2011-10-25T13:14:43.723 回答