Cocos2d x 为什么我需要在每个切片部分之间添加空的ccclippingnode?

Cocos2d x 为什么我需要在每个切片部分之间添加空的ccclippingnode?,cocos2d-x,box2d,Cocos2d X,Box2d,我用ccclipingnode将一个球分成两部分。但我发现我需要创建空的ccclipingnode,否则将进行奇怪的剪切 if(new1VecsCount>=3)addChild(Box2dItemSlice::createSliceBody(box->box2dBody->GetPosition(), box->box2dBody->GetAngle(), new1VecsSorted, new1VecsCount,pRot1)); addChild(CCClip

我用ccclipingnode将一个球分成两部分。但我发现我需要创建空的ccclipingnode,否则将进行奇怪的剪切

if(new1VecsCount>=3)addChild(Box2dItemSlice::createSliceBody(box->box2dBody->GetPosition(), box->box2dBody->GetAngle(), new1VecsSorted, new1VecsCount,pRot1));
addChild(CCClippingNode::create(CCNode::create()));
if(new2VecsCount>=3)addChild(Box2dItemSlice::createSliceBody(box->box2dBody->GetPosition(), box->box2dBody->GetAngle(), new2VecsSorted, new2VecsCount,pRot2));
addChild(CCClippingNode::create(CCNode::create()));
以下是解决方案:

转到CCClippingNode::访问函数,找到ccDrawSolidRect行并修改:

glStencilFunc(GL_NEVER, mask_layer, mask_layer);  
glStencilOp(!m_bInverted ? GL_ZERO : GL_REPLACE, GL_KEEP, GL_KEEP);  winSize]), ccc4f(1, 1, 1, 1));  
ccDrawSolidRect(CCPointZero, ccpFromSize(CCDirector::sharedDirector()->getWinSize()), ccc4f(1, 1, 1, 1));  
改为:

glStencilFunc(GL_NEVER, mask_layer, mask_layer);  
glClearStencil(!m_bInverted ? 0 : ~0);  
glStencilOp(!m_bInverted ? GL_ZERO : GL_REPLACE, GL_KEEP, GL_KEEP);  winSize]), ccc4f(1, 1, 1, 1));  
ccDrawSolidRect(CCPointZero, ccpFromSize(CCDirector::sharedDirector()->getWinSize()), ccc4f(1, 1, 1, 1));  
glClear(GL_STENCIL_BUFFER_BIT);  
你只需要添加glClearStencil!m_bInverted?0 : ~0; 和glClearGL_模具_缓冲_位;到正确的位置