遮罩層 CCClippingNode Stencil buffer is not enabled (ios/android)
阿新 • • 發佈:2019-01-25
用途:
做新手教程,周圍較暗,然後高亮一個位置。
示例程式碼:
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}