ios - 是应用程序 :didFinishLaunchingWithOptions: really a good place to initialize cocos2d and its OpenGL ES view?

标签 ios opengl-es cocos2d-iphone application-lifecycle

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

"Apps that use OpenGL ES should not use this method to prepare their drawing environment. Instead, they should defer any OpenGL ES drawing calls to the applicationDidBecomeActive: method."

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

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

提前致谢

最佳答案

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

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

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

关于ios - 是应用程序 :didFinishLaunchingWithOptions: really a good place to initialize cocos2d and its OpenGL ES view?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7889557/

相关文章:

ios - swift 默认自动释放吗?应用空闲时内存增长的原因是什么?

objective-c - 使用 C++ 库的 XCode 4 自动完成?

ios - 使用 swift 在 UITableView 中显示文本字段文本

ios - ios中的多个搜索栏实现

javascript - iOS:从需要身份验证的站点中抓取数据?

ios - 无法在 opengl es 2.0 中加载多个纹理

android - QVideoFrame::map() 崩溃

iphone - 在显示 GLkit View 之前添加一些 View - 从 UIview 导航到 GLkit View

iphone - 在运行时更改屏幕方向

iphone - Cocos2D iPhone - 对象发送自动释放次数太多?