2つのViewControllerを含むUITabBarControllerがあります。1つは、Xcodeが新しい「タブ付きアプリケーション」を作成するときに作成されるデフォルトのビューコントローラです。もう1つは、私がcocos2dビューコントローラーと呼んでいるもので、ペン先全体を占める単一のCCGLViewを含むUIViewControllerです。そのシーン内に単一のCCSceneと単一のCCLayerがあり、そのCCLayer内に単一のCCSpriteがあり、レイヤーを永久に行き来します。
cocos2dビューコントローラーが最初に表示され、スプライトがうまく動いている状態でプログラムを実行します。2番目のタブを選択して戻ると、スプライトは移動しなくなりました。前後にタブを移動しても、再び移動することはありません。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];
}