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

时间:2015-02-06 14:24:26

标签: cocos2d-x box2d

我用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()));

enter image description here enter image description here

1 个答案:

答案 0 :(得分:0)

这是解决方案:http://blog.csdn.net/jusnxie/article/details/9277121

转到CCClippingNode :: visit函数,找到“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);”和“glClear(GL_STENCIL_BUFFER_BIT);”到了正确的位置。