2013-11-01 89 views
1

首先,我需要說的是,以下全部基於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 
} 

現在,任何人都可以給我一些建議嗎?或者如果它不好,告訴我爲什麼。

回答

2

暫停將繼續繪製並呈現幀緩衝區,但幀速率非常低(4 fps)。

StopAnimation完全停止繪圖。此時並沒有定義顯示屏會發生什麼 - 在iOS上它往往只是「凍結」,但取決於GL驅動程序的實施,您經歷的閃爍也可能是一個可能的結果。這是當雙緩衝或三重緩衝不斷循環通過幀緩衝區時,但其中只有一個包含最後繪製的幀cocos2d的內容。

停止動畫僅適用於應用程序進入後臺或以其他方式隱藏的情況,例如通過在其上呈現另一個視圖。否則使用暫停。

也許你只需要在應用程序進入前景時再次運行startAnimation以防止閃爍?當然不應該要求在一個平臺上使用暫停,並在另一個平臺上停止動畫。

+0

運行'startAnimation'確實使眨眼消失。但在暫停狀態下,它會閃爍,而我找不到其他解決方法。 – pktangyue