application:didFinishLaunchingWithOptions: 真的是初始化 cocos2d 及其 OpenGL ES 视图的好地方吗?

Posted

技术标签:

【中文标题】application:didFinishLaunchingWithOptions: 真的是初始化 cocos2d 及其 OpenGL ES 视图的好地方吗?【英文标题】:Is application:didFinishLaunchingWithOptions: really a good place to initialize cocos2d and its OpenGL ES view? 【发布时间】:2011-10-25 12:55:02 【问题描述】:

Cocos2d 模板和常用示例项目在 applicationDidFinishLaunching / application:didFinishLaunchingWithOptions: 方法中初始化 cocos openGL ES 视图和其他内容。关于最后一种方法,Apple ios Programming Guide 声明:

"使用 OpenGL ES 的应用程序不应该使用这种方法来准备他们的 绘图环境。相反,他们应该推迟任何 OpenGL ES 绘图 调用 applicationDidBecomeActive: 方法。”

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

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

提前致谢

【问题讨论】:

+1 好收获!我认为您最好将此报告给 cocos2d 官方论坛/错误跟踪器,并让开发人员修改他们的代码:) 【参考方案1】:

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

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

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

【讨论】:

以上是关于application:didFinishLaunchingWithOptions: 真的是初始化 cocos2d 及其 OpenGL ES 视图的好地方吗?的主要内容,如果未能解决你的问题,请参考以下文章