我有一个包含两个视图控制器的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];
}
答案 0 :(得分:1)
我在共享控制器上调用不同的方法时发现,发现在选择cocos2d视图控制器时调用startAnimation会使一切正常工作。我用Google搜索了一段时间,并没有拿出来,所以希望这能节省一些时间。