首先需要说明的是,以下都是基于cocos2d-x-2.1.4的。
在 cocos2d-x 的 HelloCpp 项目中,可以看到它CCDirector::sharedDirector()->stopAnimation();
的调用void AppDelegate::applicationDidEnterBackground()
(点这里查看)。
它应该在应用程序处于非活动状态时停止动画。它在 iOs 中表现完美。
但是在 Android 中,当我调用 this 之后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]。”,但事实上,如果我调用 ,我可以暂停动画pause()
,所以我很困惑。
在这篇文章CCDirector::sharedDirector()->pause();
中,它说如果调用该应用程序会崩溃void AppDelegate::applicationDidEnterBackground()
。但是我自己测试过,这个版本在iOs和Android上都没有崩溃。
所以,我想如果我使用pause()
而不是stopAnimation()
.
然后我做了一些测试。最后我得到了结果,stopAnimation()
比pause()
在 iOs 中表现更好,但在 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
}
现在有人可以给我一些建议吗?或者如果它不好,请告诉我为什么。