1

アプリがバックグラウンドに移動してフォアグラウンドに戻ると、アニメーションが何らかの形で蓄積され、超高速で適用されるという奇妙な状況があります。たとえば CCRotateBy は、アプリがバックグラウンドにあった時間に追いつき、スプライトを非常に速く回転させます。

私のアプリデリゲートには、正しいアプリケーション状態処理があると思います..

- (void)applicationWillResignActive:(UIApplication *)application {
    [[CCDirector sharedDirector] pause];
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    [[CCDirector sharedDirector] resume];
    [[OALAudioSession sharedInstance] forceEndInterruption];
}

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
    [[CCDirector sharedDirector] purgeCachedData];
}

-(void) applicationDidEnterBackground:(UIApplication*)application {
    [[CCDirector sharedDirector] stopAnimation];
}

-(void) applicationWillEnterForeground:(UIApplication*)application {
    [[CCDirector sharedDirector] startAnimation];
    [[OALAudioSession sharedInstance] forceEndInterruption];
}

- (void)applicationWillTerminate:(UIApplication *)application {
    CCDirector *director = [CCDirector sharedDirector];

    [[director view] removeFromSuperview];

    [director end];
}

- (void)applicationSignificantTimeChange:(UIApplication *)application {
    [[CCDirector sharedDirector] setNextDeltaTimeZero:YES];
}

これが起こる原因は何ですか?

4

1 に答える 1

0

cocos2d 2.0 で直面する問題の 1 つです。

TEMP_FIX: アニメーションの手動一時停止を使用しました。

-(void) applicationWillResignActive:(UIApplication *)application
{
    [[NSNotificationCenter defaultCenter] postNotificationName:@"AppEnterBackground" object:nil];

    if( [navController_ visibleViewController] == director_ )
        [director_ pause];
}



//In game layer

-(void)onEnter
{
    [super onEnter];
    [[NSNotificationCenter defaultCenter] addObserver:self  selector:@selector(AppEnterBackground:) name:@"AppEnterBackground" object:nil];

}

-(void)onExit
{
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"AppEnterBackground" object:nil];
    [super onExit];
}

-(void)AppEnterBackground:(NSNotification*)notif
{
    [self pauseSchedulerAndActions];

    [mHero pauseSchedulerAndActions];

    for(MyCoin *coin in mCoinArr)
    {
       [coin  pauseSchedulerAndActions];
    }
}

同様の方法で再開できます。

于 2013-07-17T15:14:09.983 に答える