1. 程式人生 > >遮罩層 CCClippingNode Stencil buffer is not enabled (ios/android)

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

用途:

做新手教程,周圍較暗,然後高亮一個位置。

示例程式碼:


   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
 }