cocos2d 和 UINavigationController 麻烦

Posted

技术标签:

【中文标题】cocos2d 和 UINavigationController 麻烦【英文标题】:cocos2d and UINavigationController trouble 【发布时间】:2010-12-15 05:02:35 【问题描述】:

我正在开发一个应用程序,我想在应用程序的主屏幕中使用 cocos2d,而不是在其他地方(在其他地方标准 UIKit 的东西更合适)。因此,我将 EAGLView 设置为 UINavigationController 中的根视图,当用户在正确的位置点击时,我将新的视图控制器推送到导航控制器上。

到目前为止,效果很好。主视图中的 cocos2d/chipmunk 东西运行良好,推送新的视图控制器按预期工作。

但是当我回到主视图时,那里什么都没有。我看到的只是窗口背景和导航栏。

我在根视图控制器的 -viewDidAppear: 中设置了一个断点,以查看弹出后发生了什么,到目前为止一切正常(或至少与推送前相同)。

推送只是沼泽标准的导航控制器推送。我没有看到任何类型的内存警告。有人对发生的事情有想法吗?

http://cl.ly/1Q050s0h2k47032K1Y1N 有一个简单的演示项目展示了这种行为

这是基于cocos2d+chipmunk项目模板的。点击 Grossini,一个新的视图控制器被压入堆栈。点击返回按钮,格罗斯尼就消失了。

为了有趣,这个问题只存在于 ios 设备上(我运行的是 4.1),而不存在于模拟器中。

【问题讨论】:

我怀疑这是问题所在,但你泄露了这两个家伙:cl.ly/1J26180i383F3H0z3V2L 我什至不确定它们是什么,但它们看起来并不相关。 我发现如果我的 -viewDidLoad 在 EAGLview 上调用 -setNeedsLayout 的话,cocos2d 对象会被恢复,并且在导航控制器弹出到 root 后主视图是可见的。有一个明显的闪烁,虽然 - 有一会儿, cocos2d 对象不可见,但随后它们出现了。在cl.ly/1L423a1x27373t1q0s0y 上包含了我的演示的修改版本,这感觉像是进步,但令人讨厌的闪烁。 【参考方案1】:

我已经解决了你的问题。 您必须在代码中执行一些步骤。

在 RootViewController nib 文件中,将视图标识从 HomeView 更改为 UIView。

在 RootViewController 类中创建一个 Home View 对象

@interface RootViewController : UIViewController 
    HomeView *homeViewObj;

在 RootViewController.m 文件中的 ViewDidLoad 方法中添加此代码

homeViewObj = [[HomeView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
[self.view addSubview:homeViewObj];

并在您的 ViewDidLoad 方法中的所需位置替换此代码。

CCDirector *director = [CCDirector sharedDirector];

    // attach the openglView to the director
    [director setOpenGLView:(EAGLView *)homeViewObj];

    [director setDeviceOrientation:kCCDeviceOrientationPortrait];
    [director setAnimationInterval:1.0/60];
    [director setDisplayFPS:YES];

那么问题就解决了,一切顺利。

问候,

萨提亚

【讨论】:

谢谢您,这解决了问题。不过,我不完全明白为什么。你能解释一下吗? Tom,我执行了您的代码并对其进行了测试,我发现了一件事,当您返回主视图时,它没有显示“EAGLView”,但它正在检测触摸并执行操作。双击时,视图转到 2ndView Controller,然后我单击返回,然后显示 EAGLView。然后我了解到某些视图覆盖在“EAGLView”上,因此我将普通视图放在 InterfaceBuilder 中并将 EAGLView 添加为子视图。然后问题解决了 嘿!我一直在寻找相同的东西,Thanx Satya

以上是关于cocos2d 和 UINavigationController 麻烦的主要内容,如果未能解决你的问题,请参考以下文章

如何优化cocos2d程序的内存使用和程序大小

如何连接 FaceBook SDK 和 cocos2d

cocos2d 和菜单有问题吗?

cocos2d 和 UINavigationController 麻烦

如何使用cocos2d

cocos2d 1.0 beta 两个场景之间的过渡和程序刚刚退出?