0

我有一个包含两个视图控制器的 UITabBarController。一种是 Xcode 创建新的“选项卡式应用程序”时创建的默认视图控制器。另一个,我称之为 cocos2d 视图控制器,是一个 UIViewController,它包含一个 CCGLView,它占据了整个 nib。它在该场景中有一个 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];
}
4

1 回答 1

1

我摸索着在共享导向器上调用不同的方法,发现在选择 cocos2d 视图控制器时调用 startAnimation 可以使其正常工作。我用谷歌搜索了一段时间,但没有想到,所以希望这能节省一些时间。

于 2012-07-12T16:01:08.410 回答