在我的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
,因此它将变为全黑。