Android cocos2d-x CCDirector,暂停/恢复vs停止动画/开始动画

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()之后,运行动画的元素将开始闪烁。而且,

首先,我需要说,以下所有内容都是基于cocos2d-x-2.1.4的

在cocos2d-x的HelloCpp项目中,您可以看到它调用
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
确实会使闪烁消失。但在暂停状态下,它会闪烁,我找不到其他解决方法。