首先,我需要說的是,以下全部基於cocos2d-x-2.1.4。cocos2d-x CCDirector,暫停/恢復vs stopAnimation/startAnimation
在cocos2d-x的HelloCpp項目中,您可以看到它在void AppDelegate::applicationDidEnterBackground()
(click here to check)中調用CCDirector::sharedDirector()->stopAnimation();
。
它假設應用程序處於非活動狀態時停止動畫。它在iOs中表現完美。
但是在Android中,在我調用stopAnimation()
之後,正在運行動畫的元素將開始閃爍。由於該設備的性能較差,因此顯示效果更差。
然後我試着用CCDirector::sharedDirector()->pause()
,它執行得不錯,動畫停止了,並且不是眨眼。
所以我想知道這兩種方法有什麼區別。
在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()
,所以我很困惑。
而在此post中,它表示如果在void AppDelegate::applicationDidEnterBackground()
中調用CCDirector::sharedDirector()->pause();
,應用程序會崩潰。但是我自己測試過,它在iO和Android版本都沒有崩潰。
所以,我想如果我用pause()
而不是stopAnimation()
會發生什麼。
然後我做了一些測試。最後我得到了結果,stopAnimation()
在iOs中表現比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
}
現在,任何人都可以給我一些建議嗎?或者如果它不好,告訴我爲什麼。
運行'startAnimation'確實使眨眼消失。但在暫停狀態下,它會閃爍,而我找不到其他解決方法。 – pktangyue