0

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];
}
4

1 に答える 1

1

共有ディレクターでさまざまなメソッドを呼び出してみたところ、cocos2dビューコントローラーが選択されているときにstartAnimationを呼び出すと、すべてが正しく機能することがわかりました。私はしばらくの間グーグルでそれを思い付かなかったので、うまくいけば、これは誰かの時間を節約するでしょう。

于 2012-07-12T16:01:08.410 に答える