Cocos安卓上面出现残影的问题

原来有一些帖子提到过,但是没有具体的解决方案,有解决思路。
比如下面:
https://forum.cocos.com/t/cocos2d-x-3-16/65339/10
@minggo 提到是surfaceview的问题,确实是。
@ccser 方案在下面,但是还有个疑惑。

因为游戏开始的时候指定了要使用alpha通道(肯定要使用),所以下面的alpha用了8bit的大小。
// set OpenGL context attributes: red,green,blue,alpha,depth,stencil
GLContextAttrs glContextAttrs = {8, 8, 8, 8, 24, 8};
然后安卓这边判断如果用了alpha通道,所以判断如果使用了alpha通道,就指定glSurfaceView的背景为透明(可以达到一个效果,比如:Activity上面有元素,OpenGL的画布盖在Activity上面,画布上面没有元素,可以透过画布看到Activity的上面的元素)。这儿指定为透明就会触发某些手机上面的BUG,导致有残影出现(在华为的官方论坛发现一些用了OpenGL es的应用软件也会出现这种情况,比如一些输入法)。把这行注释掉就没问题了。
//this line is need on some device if we specify an alpha bits
if(this.mGLContextAttrs[3] > 0) glSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT);
但是这行注释有点儿弄不明白,,难道是某些机器上,没有这行的话,alpha通道不生效?

@coser

哈哈,我现在已经放弃了,彻底不搞 cocos XXX 了。cocos 让我这样没什么技术的人十分的累,折腾不起。天天通宵找解决方法(不止这个问题),实在是受不了,工作我也辞了。告辞! cocos 永别。

但是我把if(this.mGLContextAttrs[3] > 0) glSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT); 注释掉了之后 播放视频就黑屏了,目测是被遮挡了,不注释的话,播放视频就是有半透明的状态

怀疑和切换scene也有关系,在第一个scene播放正常,切换了一个scene之后,只在屏幕的四周有一些能播出来

@minggo

scene 的切换没看出来有什么问题,之前的 scene 被切出去了啊。

那还真是想不出来其他什么差别导致的问题, 这个太难debug了,基本只能靠猜了

不把这个去掉,而是改为非透明的呢?

试过了UNKNOWN,直接是黑屏了,RGBA_8888 还是透明的

我弄了两个干净的scene来回切,发现播放没问题,但是再加一个layer在scene上,好像都会把video遮盖,设置层级也没效果,是因为cocos层 跟video层 不在一个层上吗,video用的都是原生的UI,被cocos遮挡了

layer 和 scene 不应该有差别啊。引擎组件里的 video 使用原生控件实现的,和引擎渲染的 glsurfaceview 都属于 android 的 view,属于同一层级。

我这里临时解决了,就是把要播放视频的时候,把当前scene上的所有的child都隐藏,在播放视频就没问题了,确实是被scene上的其他东西给遮挡了

你的这个问题和残影有什么关系呢?

都是特定机型会出现而且都if(this.mGLContextAttrs[3] > 0)都走到这个判断里面了,现在看来应该是不同的两个问题,就是videoplayer在特定的安卓机型上播放的时候,会被当前scene的其他child遮挡