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

但是,可以在游戏仍在屏幕上可见的情况下调用applicationDidEnterBackground,不仅是当使用主屏幕按钮将游戏最小化(并且变得不可见)时(例如,当您在游戏中开始购买过程时,并且Google帐单显示它弹出时)。如果您现在在此弹出窗口处于活动状态的情况下旋转屏幕,则游戏屏幕将全黑,结果是黑屏,只有google billing对话框可见。
如果可见Google帐单对话框,并且您将应用程序最小化然后再将其带回,则会发生同样的情况。

我可以解决此问题的唯一方法是不调用stopAnimation。

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

我可以看到如何正确解决此问题的唯一方法是,知道游戏放在后台时是否仍然可见,这可以通过覆盖Android上的onStop()函数来实现。

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

暂停/恢复导演具有与...相同的效果

任何帮助将不胜感激!

亲切的问候,
米奇

最佳答案

如果您的游戏/应用进入后台模式,则其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,因此它将变为全黑。

08-05 08:01