次のように、Cocos2d ゲームのメニュー画面で回転しているスプライトがあります。
CCAction* action = [CCRepeatForever actionWithAction:
[CCRotateBy actionWithDuration:1.0 angle:90.0f]];
[sprite runAction:action];
ゲームをバックグラウンドに送り、ゲームを再開すると問題が発生します。バックグラウンドへの送信/再開操作が速い場合は、わずかな不具合があります。ゲームがバックグラウンドに留まる時間が長いほど、ゲームが再開したときにスプライトが通常の回転を再開するまでの時間が長くなります。私は Cocos2d 2.0、Xcode 4.5 を iOS 6 で実行しています。
編集:良い点ガンシル!これが私が持っていたものです(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];
}
}
これが正しいアプローチであったかどうかはわかりません。最初は少し躊躇しますが (当然)、アニメーションはスムーズに始まります。わずかな躊躇は、以前に見た激しいジッタリングよりも優れていますが、このソリューションを改善できるかどうかはわかりません。