Когда моя игра Cocos2d возобновляется с фона, анимационные действия заикаются
У меня есть спрайт, который я вращаю на экране меню в моей игре Cocos2d, например:
CCAction* action = [CCRepeatForever actionWithAction:
[CCRotateBy actionWithDuration:1.0 angle:90.0f]];
[sprite runAction:action];
Проблема возникает, когда я отправляю игру в фоновый режим, а затем возобновляю игру. Если операция отправки в фоновый режим / возобновления выполняется быстро, возникает небольшая ошибка. Чем дольше игра остается на заднем плане, тем дольше спрайт будет "дергаться", когда игра возобновится, прежде чем он снова начнет нормально вращаться. Я на Cocos2d 2.0, Xcode 4.5, работает на iOS 6.
Редактировать: Хорошая точка Gangcil! Вот что у меня было (я думаю, это было из шаблона Cocos2d:
// getting a call, pause the game
-(void) applicationWillResignActive:(UIApplication *)application
{
if( [_navController visibleViewController] == _director )
[_director pause];
}
// call got rejected
-(void) applicationDidBecomeActive:(UIApplication *)application
{
if( [_navController visibleViewController] == _director )
[_director resume];
}
Мне удалось устранить проблему, изменив эти функции на:
// getting a call, pause the game
-(void) applicationWillResignActive:(UIApplication *)application
{
if( [_navController visibleViewController] == _director )
{
[_director stopAnimation];
[_director pause];
}
}
// call got rejected
-(void) applicationDidBecomeActive:(UIApplication *)application
{
if( [_navController visibleViewController] == _director )
{
[_director stopAnimation];
[_director resume];
[_director startAnimation];
}
}
Я не уверен, был ли это правильный подход или нет - сначала возникает небольшое колебание (понятно), но затем анимация начинается плавно. Небольшое колебание лучше, чем дикое дрожание, которое я видел раньше - но я не знаю, можно ли улучшить это решение.