遮罩层 CCClippingNode Stencil buffer is not enabled (ios/android)

来源:互联网 发布:本子画师推荐 知乎 编辑:程序博客网 时间:2024/06/07 06:48

用途:

做新手教程,周围较暗,然后高亮一个位置。

示例代码:

 
   CCLayerColor *player = CCLayerColor::create(ccc4(0, 0, 0, 110));
   
    CCClippingNode *pclip = CCClippingNode::create();
    pclip->setInverted(true);
    layer->addChild(pclip);
    pclip->addChild(player);
   
    static ccColor4F red = { 1, 0, 0, 1 };
    float radius = 55.0f;
    const int nCount = 200;
    const float angel = 2.0f * (float)M_PI / nCount;
    static CCPoint circle[nCount];
    for (int i = 0; i < nCount; i++) {
        float radian = i * angel;
        circle[i].x = radius * cosf(radian);
        circle[i].y = radius * sinf(radian);
    }
    CCDrawNode *pStencil = CCDrawNode::create();
    pStencil->drawPolygon(circle, nCount, red, 0, red);
    pStencil->setPosition(ccp(200, 200));
    pclip->setStencil(pStencil);



==========

当出现Stencil buffer is not enabled时,作如下修改即可

iOS:
AppController.mm
depthFormat: GL_DEPTH_COMPONENT16
==> depthFormat: GL_DEPTH24_STENCIL8_OES
EAGLView *__glView = [EAGLView viewWithFrame: [window bounds]
                                     pixelFormat: kEAGLColorFormatRGBA8
                                     depthFormat: GL_DEPTH24_STENCIL8_OES
                              preserveBackbuffer: NO
                                      sharegroup: nil
                                   multiSampling: NO
                                 numberOfSamples: 0 ];

Android:
Cocos2dxGLSurfaceView.java
public Cocos2dxGLSurfaceView(final Context context) {
          super(context);

          this.initView();


          this.setEGLConfigChooser(5, 6, 5, 0, 16, 8); // add this
 }
0 0
原创粉丝点击