Cocos Studio可滚动层裁剪失败总结

目前Cocos Studio的UI控件中包含ScrollView、PageView、ListView三种滚动层,但是经常会遇到开发者们抱怨在游戏中会显示说有的内容,而不会将超出区域裁剪掉。

目前经过总结,基本由以下三种情况造成:

一:未开启“模拟裁剪属性”

如上图:这个属性在所有的滚动层容器都可以看到。如果你想正常显示滚动层的内容,请注意勾选此项。

二:未开启OpenGL深度缓存

这个问题在ios会经常遇到,部分安卓机型也会出现,遇到此问题按照下面的方法修改:

ios 工程修改 :AppController.mm文件(在ios项目根文件夹)


EAGLView *__glView = 
                                     pixelFormat: kEAGLColorFormatRGBA8
                                     depthFormat: GL_DEPTH24_STENCIL8_OES
                              preserveBackbuffer: NO
                                      sharegroup: nil
                                   multiSampling: NO
                                 numberOfSamples: 0];

安卓工程 修改 game activity,在安卓项目的src目录下


public Cocos2dxGLSurfaceView onCreateView() {
        Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this);
        glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8);
        return glSurfaceView;
    }

三:硬件不支持

如果您尝试过以上方法还是不能解决,这多数情况下是由于这台设备的显卡不能够支持,这部分机型多数集中于10年左右的机型,如U880等低端机。目前这批机型已经基本退出市场,可以给予忽略。

如果大家有其他问题并未包含在以上三种情况欢迎跟帖回复。

四:背景变为绿色

该问题是opengL渲染模式问题导致的,请您尝试修改appActivity.java解决。代码如下:

public Cocos2dxGLSurfaceView onCreateView() {
Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this);
glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8); //仍不行可以试试8,8,8,8,16,0
return glSurfaceView;
}

还有一种只在切换/加载场景、截屏的时候出现绿色,但是加载完毕后一切正常
这个请参考https://github.com/cocos2d/cocos2d-x/pull/7927 修复。仅针对3.0~3.2,3.3以后版本无需修改。

iPad2 ios5.1 裁剪也失败。已经设置 GL_DEPTH24_STENCIL8_OES。版本Cocos版本2.2.1.studio版本1.1

求解决方案啊。。版主可否有良策?

谢版大,已解决安卓中的问题了

typedef enum {
LAYOUT_CLIPPING_STENCIL,
LAYOUT_CLIPPING_SCISSOR
}LayoutClippingType;

求解这两者的区别??? :14:

这两个裁切类型,是底层在裁切时用到的两种方式,第一种方式使用的模板缓冲,所以无论控件的矩阵怎么样变换,都可以完美的进行裁切,但是效率一般;第二种裁切方式,直接使用矩阵进行计算,效率比较高,但是目前还不能很好的支持旋转和缩放;

你说的第一种方式应该是STENCIL吧?

第一种方式貌似对机子硬件性能有要求,使用的和CCClippingNode的裁剪是相同的。
之前我使用CCClippingNode在自己的手机上就是无效的,在老大的机子上是有效的。

第二种方式大概是和ScrollView差不多的吧。
之前我就是参考ScrollView写了一个,考虑多各种因素,可以支持缩放(可能有遗漏,毕竟没好好的测试。对比Layout的源码更加有种自己写的弱爆的感觉),但是的确我没有想到支持旋转的办法。
就是因为我之前是用自己写的,现在看到CocoStudio的Layout有支持,所以打算混搭Cocos2d的控件来使用做滑动列表和缩放功能。

突然想起如果使用Panel来做裁切的话,要给Panel setSize(使用SCISSOR)……这里就会造成调整位置方面比较麻烦,因为原点永远都是在左下角,相比我写的参考CCClippingNode和CCScrollView的写法,我的ClippingArea大小可以为0,相对来讲使用更加的灵活方便 :2:

不会将超出区域裁剪掉 ,这个怎么看出来?

mark一下 以后做IOS的时候看一下

不知道在ios上面有没有问题! 以后编译ios版本,在查看!

http://www.cocoachina.com/bbs/read.php?tid=200995

这个问题,请问如何解决?

记录下来,估计以后会遇到

mi 3 型号
设置深度缓冲,不管用

public Cocos2dxGLSurfaceView onCreateView() {
//return new Cocos2dxGLSurfaceView(this);
Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this);
//glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8);
glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8);
return glSurfaceView;
}

android修改之后,glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8); 该语句会报错,导致无法执行,求解答。

在lua工程下面以上方法都不起作用

能否提供报错信息呢?

这个是cocos的大坑,我就不明白了,为什么有2个地方可以设置这个深度缓冲的,是要故意迷惑人吗。真心不懂,被迷惑了几个月了终于发现问题了

排好后,也加了裁剪,加入到程序中,怎么排好的所有的都挤在显示区域了,在线等,求解释

mark mark mark

LZ大大,我遇到一个问题,当pushScene使用了Transition如TransitionPageTurn之类的过渡场景过渡到含有CocoStudio的UI控件的场景,过渡时就会出现部分UI控件显示绿色区域,比如ScrollView的的可视区域中的空白区域会显示为绿色