gpt4 book ai didi

android - applicationDidEnterBackground + Director->stopAnimation() = 黑屏

转载 作者:行者123 更新时间:2023-11-29 20:53:28 26 4
gpt4 key购买 nike

在我的 AppDelegate 的 applicationDidEnterBackground() 中,我调用了 cocos2d::Director::getInstance()->stopAnimation(),在 applicationWillEnterForeground() 中,我调用了 cocos2d::Director::getInstance()->startAnimation()。

但是 applicationDidEnterBackground 可以在游戏仍然在屏幕上可见的情况下被调用,而不仅仅是在使用主页按钮最小化游戏(并且变得不可见)时,例如当您在游戏中开始购买过程时,谷歌账单显示它是弹出窗口。如果您现在在激活此弹出窗口的情况下旋转屏幕,游戏屏幕将全黑,结果是黑屏,只有谷歌结算对话框可见。如果 Google 结算对话框可见,并且您最小化应用程序然后再将其恢复,也会发生同样的情况。

我能解决这个问题的唯一方法是不调用 stopAnimation。

这是否会对电池生命周期产生负面影响,或者 cocos2d-x 会在最小化时自动暂停所有操作?

我能看到如何正确修复此问题的唯一方法是了解游戏在置于后台时是否仍然可见,我可以通过覆盖 Android 上的 onStop() 函数来做到这一点。

那么其他人是如何解决这个问题的呢?您是选择停止动画并将黑屏视为次要副作用,还是让动画继续运行?

暂停/恢复 Director 具有相同的效果 btw...

如有任何帮助,我们将不胜感激!

亲切的问候,密歇根州

最佳答案

如果您的游戏/应用程序进入后台模式,其Activity 将停止更新,因此无论您是否调用stopAnimation(),所有OpenGL 绘制调用都将暂停。因此,即使您的游戏没有任何后台作业,也不会影响电池生命周期。

此外,为什么调用 stopAnimation() 时屏幕会变黑?让我们阅读一些代码:

void CCDisplayLinkDirector::mainLoop(void)
{
if (m_bPurgeDirecotorInNextLoop)
{
m_bPurgeDirecotorInNextLoop = false;
purgeDirector();
}
else if (! m_bInvalid)
{
drawScene();

// release the objects
CCPoolManager::sharedPoolManager()->pop();
}
}

void CCDisplayLinkDirector::stopAnimation(void)
{
m_bInvalid = true;
}

如果 stopAnimation() 被调用,它也会停止 OpenGL 绘制调用。您的游戏的最后一帧仍会显示,但如果您的游戏进入背景或另一个 Activity 或前面弹出的东西,因为没有新的绘制调用更新游戏的 Activity ,它会变成全黑。

关于android - applicationDidEnterBackground + Director->stopAnimation() = 黑屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28448745/

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