gpt4 book ai didi

android - cocos2d-x CCDirector,暂停/恢复 vs stopAnimation/startAnimation

转载 作者:行者123 更新时间:2023-11-29 10:52:48 27 4
gpt4 key购买 nike

首先声明,以下内容均基于cocos2d-x-2.1.4。

在cocos2d-x的HelloCpp工程中,可以看到在void AppDelegate::applicationDidEnterBackground()中调用了CCDirector::sharedDirector()->stopAnimation(); (click here to check)。

它应该在应用程序处于非 Activity 状态时停止动画。它在 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]。”,但事实上,如果我调用 pause(),我可以暂停动画,所以我很困惑。

在这个post ,它表示如果在 void AppDelegate::applicationDidEnterBackground() 中调用 CCDirector::sharedDirector()->pause(); 应用程序会崩溃。但是我自己测试过,在这个版本的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
}

现在有人可以给我一些建议吗?或者,如果它不好,请告诉我原因。

最佳答案

Pause 将继续绘制和呈现帧缓冲区,但帧速率非常低(4 fps)。

StopAnimation 完全停止绘制。目前还没有定义显示器会发生什么——在 iOS 上它往往只是“卡住”,但根据 GL 驱动程序的实现,您体验到的闪烁也是一种可能的结果。这是双缓冲或三缓冲不断循环通过帧缓冲区,但其中只有一个包含 cocos2d 最后绘制的帧的内容。

停止动画仅适用于应用程序进入后台或以其他方式隐藏的情况,例如通过在其顶部呈现另一个 View 。否则使用暂停。

也许您只需要在应用进入前台时再次运行 startAnimation 以防止闪烁?当然不应该要求在一个平台上使用 pause 而在另一个平台上使用 stopAnimation。

关于android - cocos2d-x CCDirector,暂停/恢复 vs stopAnimation/startAnimation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19725353/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com