最初に言っておくと、以下はすべて cocos2d-x-2.1.4 に基づいています。
cocos2d-x の HelloCpp プロジェクトでは、呼び出していることがわかりますCCDirector::sharedDirector()->stopAnimation();
(void AppDelegate::applicationDidEnterBackground()
ここをクリックして確認してください)。
アプリが非アクティブなときにアニメーションを停止することを想定しています。そして、それは iOS で完璧に機能します。
しかし Android では、これを呼び出した後、stopAnimation()
アニメーションを実行していた要素が点滅し始めます。また、デバイスのパフォーマンスが低下したため、表示が悪化しました。
次に、 を使用しようとしましたがCCDirector::sharedDirector()->pause()
、パフォーマンスは悪くなく、アニメーションは停止し、点滅しませんでした。
したがって、これら2つの方法の違いを知りたいです。
ではCCDirector.h
、次のコードを確認できます。
/** Pauses the running scene.
The running scene will be _drawed_ but all scheduled timers will be paused
While paused, the draw rate will be 4 FPS to reduce CPU consumption
*/
void pause(void);
/** Stops the animation. Nothing will be drawn. The main loop won't be triggered anymore.
If you don't want to pause your animation call [pause] instead.
*/
virtual void stopAnimation(void) = 0;
ここでは「アニメーションを一時停止したくない場合は代わりに [pause] を呼び出してください。」 と書いてありますが、実際には を呼び出すとアニメーションを一時停止できpause()
たので、戸惑いました。
そして、この投稿では、 で呼び出されるとアプリがクラッシュすると述べていCCDirector::sharedDirector()->pause();
ますvoid AppDelegate::applicationDidEnterBackground()
。しかし、自分でテストしたところ、このバージョンでは iO と Android の両方でクラッシュしませんでした。
pause()
では、の代わりにを使用するとどうなるかを考えましたstopAnimation()
。
それから私はいくつかのテストをしました。最終的に結果が得られ、iOstopAnimation()
よりも優れpause()
たパフォーマンスを発揮しましたが、Android では逆でした。
したがって、コードを次のように変更したかったのです。
void AppDelegate::applicationDidEnterBackground() {
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
CCDirector::sharedDirector()->stopAnimation();
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
CCDirector::sharedDirector()->pause();
#endif
}
void AppDelegate::applicationWillEnterForeground() {
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
CCDirector::sharedDirector()->startAnimation();
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
CCDirector::sharedDirector()->resume();
#endif
}
今、誰かが私にいくつかの提案をすることができますか? または、良くない場合はその理由を教えてください。