我有一个包含两个视图控制器的 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];
}