Android cocos2d-x CCDirector,暂停/恢复vs停止动画/开始动画
首先,我需要说,以下所有内容都是基于cocos2d-x-2.1.4的 在cocos2d-x的HelloCpp项目中,您可以看到它调用Android cocos2d-x CCDirector,暂停/恢复vs停止动画/开始动画,android,ios,cocos2d-x,Android,Ios,Cocos2d X,首先,我需要说,以下所有内容都是基于cocos2d-x-2.1.4的 在cocos2d-x的HelloCpp项目中,您可以看到它调用CCDirector::sharedDirector()->stopAnimation()在void AppDelegate::applicationIdentinterbackground()()中 它假定在应用程序处于非活动状态时停止动画。而且它在iOs中表现完美 但是在安卓系统中,在我调用这个stopAnimation()之后,运行动画的元素将开始闪烁。而且,
CCDirector::sharedDirector()->stopAnimation()代码>在void AppDelegate::applicationIdentinterbackground()
()中
它假定在应用程序处于非活动状态时停止动画。而且它在iOs中表现完美
但是在安卓系统中,在我调用这个stopAnimation()
之后,运行动画的元素将开始闪烁。而且,由于该设备的性能较低,其显示更差
然后我尝试使用CCDirector::sharedDirector()->pause()
,效果不错,动画停止并且不闪烁
所以我想知道这两种方法的区别
在中,我们可以看到以下代码:
/** 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()
,我可以暂停动画,所以我很困惑
在本文中,它说如果调用CCDirector::sharedDirector()->pause(),应用程序将崩溃代码>在void AppDelegate::applicationIdentinterbackground()
中。但我自己测试过,在iOs和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
}
现在谁能给我一些建议?或者如果不好,请告诉我原因。暂停将继续绘制和显示帧缓冲区,但帧速率非常低(4 fps)
停止动画完全停止绘制。目前还没有定义显示器会发生什么情况-在iOS上,它往往只是“冻结”,但取决于GL驱动程序的实现,您所经历的闪烁也可能是一种结果。此时,双缓冲区或三缓冲区在帧缓冲区中不断循环,但其中只有一个包含cocos2d最后绘制的帧的内容
停止动画仅适用于应用程序进入背景或以其他方式隐藏的情况,例如,通过在其顶部显示另一个视图。否则使用暂停
也许你只需要在应用程序进入前台时再次运行startAnimation来防止闪烁?当然,不应该要求在一个平台上使用暂停,在另一个平台上停止动画。运行startAnimation
确实会使闪烁消失。但在暂停状态下,它会闪烁,我找不到其他解决方法。