Cocos2d 2.x CCGLView在UITabBarViewController上选项卡时停止渲染

时间:2012-07-12 15:31:25

标签: objective-c cocos2d-iphone uitabbarcontroller

我有一个包含两个视图控制器的UITabBarController。一个是Xcode创建新的“选项卡式应用程序”时创建的默认视图控制器。另一个,我称之为cocos2d视图控制器,是一个UIViewController,它包含一个CCGLView,它占据整个笔尖。它在该场景中有一个CCScene和一个CCLayer,在该CCLayer中有一个CCSprite,它在整个层中来回移动。

我运行程序时首先显示cocos2d视图控制器,并且精灵快乐地移动。当我选择第二个选项卡并返回时,精灵不再移动。来回切换不会再次移动。我在didSelectViewController中设置了一个断点并检查了sharedDirector。它没有暂停,它具有帧率和一切。

我还有一个单独的选项卡式应用程序,它实现ccTouchesBegan并根据用户手势移动图层。在该应用程序中,仍会检测到触摸,更改图层的位置,但设备/模拟器上的视图永远不会更改。即使我改变位置,远离标签,也会显示原始未移动的图像。

问题:为什么cocos2d视图显然会停止它的渲染循环?

以下是我在测试应用程序的cocos2d视图控制器中所拥有的内容:

- (void)viewDidLoad
{
    [super viewDidLoad];
    director = [CCDirector sharedDirector];
    [director setDisplayStats:YES];

    [self runCocos2d];
}

- (void) runCocos2d
{
    glView.multipleTouchEnabled = YES;
    [[CCDirector sharedDirector] setView:self.glView];

    scene = [TestScene node];
    [[CCDirector sharedDirector] pushScene:scene];
    [scene startScene];
}

StartScene只在我的图层中调用此方法

- (void) start
{
    CGSize winSize = [CCDirector sharedDirector].winSize;

    CCSprite *seeker = [CCSprite spriteWithFile:@"seeker.png"];
    seeker.position = ccp(0, winSize.height/2);

    [self addChild: seeker z:0];

    // move the table constantly so we can see if anything it rendering
    id moveToPosition1 = [CCMoveTo actionWithDuration: 3
                                         position: ccp(winSize.width, winSize.height/2)];
    id moveToPosition2 = [CCMoveTo actionWithDuration: 3
                                         position: ccp(0, winSize.height/2)];
    id sequence = [CCSequence actions:moveToPosition1, moveToPosition2, nil];

    id moveOverAndOver = [CCRepeatForever actionWithAction:sequence];

    [seeker runAction: moveOverAndOver];
}

1 个答案:

答案 0 :(得分:1)

我在共享控制器上调用不同的方法时发现,发现在选择cocos2d视图控制器时调用startAnimation会使一切正常工作。我用Google搜索了一段时间,并没有拿出来,所以希望这能节省一些时间。