【bug反馈】接入sdkbox->admob,退到后台再切回前台,画面卡死或黑屏!

@yinjimmyCocosBCX开发团队

大哥,出来帮我们看看呗。项目被卡住了,推进不动。好着急

加你qq了,进群489182678

sdkbox 的 js 绑定 在 2.2 上有bug

请问下载怎么解决?有没有头绪!!

谢谢Jimmy帮忙解决!分3步:

1。CCEAGLView-ios.h 文件

-(void) setupGLContext2; // 添加

2。CCEAGLView-ios.mm 文件

-(void) setupGLContext2
{
if (!_context || ![EAGLContext setCurrentContext: _context] )
{
NSLog(@“Can not crate GL context.”);
return;
}
}

  • (BOOL) createFrameBuffer

3。AppController.mm 文件

  • (void)applicationDidBecomeActive:(UIApplication *)application {
    [[SDKWrapper getInstance] applicationDidBecomeActive:application];

    auto glview = (__bridge CCEAGLView *)cocos2d::Application::getInstance()->getView();
    [glview setupGLContext2];
    }

这样切回前台刚要黑屏马上又渲染了。不过如果广告切换的话,有问题的广告可能还是会出现这个情况,但还是解决了前后台切换的大问题。
奇怪的是Jimmy那边一直复现不了,摸瞎帮忙解决的。。找时间我也更换环境看看。
继续测试,也希望框架能够进一步完善!

iOS 12.3.1 看完admob或者中途关掉试玩广告,回到游戏界面时画面停止渲染,停留在进入广告前的画面。但是脚本还在跑,能看到日志输出。

ccc 调整 CCApplication-ios.mm

-(void) doCaller: (id) sender
{
    static std::chrono::steady_clock::time_point prevTime;
    static std::chrono::steady_clock::time_point now;
    static float dt = 0.f;

    prevTime = std::chrono::steady_clock::now();
    
    // setup OpenGL ES Context start 开始
    CCEAGLView *glview = (CCEAGLView*)_application->getView();
    [glview setupGLContext2];
    // setup OpenGL ES Context end 结束
    
    bool downsampleEnabled = _application->isDownsampleEnabled();
    if (downsampleEnabled)
        _application->getRenderTexture()->prepare();
    
    _scheduler->update(dt);
    cocos2d::EventDispatcher::dispatchTickEvent(dt);
    
    if (downsampleEnabled)
        _application->getRenderTexture()->draw();
    
    [(CCEAGLView*)(_application->getView()) swapBuffers];
    cocos2d::PoolManager::getInstance()->getCurrentPool()->clear();
    
    now = std::chrono::steady_clock::now();
    dt = std::chrono::duration_cast<std::chrono::microseconds>(now - prevTime).count() / 1000000.f;
}

@86396 可以试一下这个吗?

是 主循环还在,但是 OpenGL 的环境坏掉了。

这个是改成每个主循环都调用一次[EAGLContext setCurrentContext: _context]吗,有无性能影响?

cocos2d-x 3.17.2

-(void) doCaller: (id) sender
{
    if (isAppActive) {
        cocos2d::Director* director = cocos2d::Director::getInstance();
        EAGLContext* cocos2dxContext = [(CCEAGLView*)director->getOpenGLView()->getEAGLView() context];
        if (cocos2dxContext != [EAGLContext currentContext])
            glFlush();
        
        [EAGLContext setCurrentContext: cocos2dxContext];

        CFTimeInterval dt = ((CADisplayLink*)displayLink).timestamp - lastDisplayTime;
        lastDisplayTime = ((CADisplayLink*)displayLink).timestamp;
        director->mainLoop(dt);
    }
}

抱歉刚看到!这个可以!直接替换之前说的第3步,测了很多次没有发现卡死或黑屏,也不会有切回瞬间的短暂黑屏了。

感谢测试。

这个问题有在git上修复吗

我也饿是2.0.9,怎么解决啊

我们2.0.9怎么修复这个BUG啊

大大~~ 你发的这个和3.17.2里面的一样~~~
求帮助~~