假设使用CCDrawNode创建的填充多边形:
CCDrawNode *polygon = [CCDrawNode node];
CGPoint points[4];
points[0] = ccp(-20.0, -20.0);
points[1] = ccp(20.0, -20.0);
points[2] = ccp(20.0, 20.0);
points[3] = ccp(-20.0, 20.0);
[polygon drawPolyWithVerts:points count:4 fillColor:[CCColor blackColor] borderWidth:0.0 borderColor:[CCColor clearColor]];
[self addChild:polygon];
如何在其中切出异型孔,以获得类似的效果?
http://i.imgur.com/45qetR1.png
孔将动态生成并以各种配置生成,因此无法选择准备一组预制纹理。
我没有运气尝试使用CCDrawNode并应用混合功能将其创建为多边形。
CCDrawNode *circle = [CCDrawNode node];
[circle drawDot:ccp(0.0, 0.0) radius:10.0 color:[CCColor whiteColor]];
[circle setBlendFunc:(ccBlendFunc){GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA}];
[self addChild:circle];
要么
...
[polygon setBlendFunc:(ccBlendFunc){GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA}];
[polygon drawDot:ccp(0.0, 0.0) radius:10.0 color:[CCColor whiteColor]];
[self addChild:polygon];
我相信我尝试了混合模式的每种组合,但没有找到正确的模式。
我显然做错了,因为这看起来可以使用混合模式来实现。还是我必须重写
draw
方法并应用一些OpenGL ES代码?我尝试使用OpenGL,但最终却一事无成。另外,我不确定将OpenGL ES(2.0+)与Cocos2D混合的首选方法是什么,因为我知道我应该避免在“立即模式”下进行。但是,如果这不是正确的方法,我想知道您的建议。
顺便说一下-CCDrawNode似乎不支持开箱即用的
opacity
属性。有办法启用它吗?无论该属性的值如何,它仅以100%不透明度呈现其内容。我在iOS 7.1上使用Cocos2D 3.0。
最佳答案
您应该看看CCClippingNode类。这是一个例子:
// Square-shaped hole
CCDrawNode *square = [CCDrawNode node];
CGPoint squarePoints[4] = {ccp(-20.0, -20.0), ccp(20.0, -20.0), ccp(20.0, 20.0), ccp(-20.0, 20.0)};
[square drawPolyWithVerts:squarePoints count:4 fillColor:[CCColor blackColor] borderWidth:0.0 borderColor:[CCColor clearColor]];
square.position = ccp(0.0, 0.0);
// Triangle-shaped hole
CCDrawNode *triangle = [CCDrawNode node];
CGPoint trianglePoints[3] = {ccp(-10.0, 25.0), ccp(10.0, 25.0), ccp(0.0, 25.0 + 10.0 * sqrt(3.0))};
[triangle drawPolyWithVerts:trianglePoints count:3 fillColor:[CCColor blackColor] borderWidth:0.0 borderColor:[CCColor clearColor]];
triangle.position = ccp(0.0, 0.0);
// Prepare your stencil
CCNode *stencil = [CCNode node];
[stencil addChild:square];
[stencil addChild:triangle];
// Create a clipping node with the prepared stencil
CCClippingNode *clippingNode = [CCClippingNode clippingNodeWithStencil:stencil];
// Setting the clipping mode to inverted will result in the clipping node drawing its contents everywhere BUT the stencil's non-transparent areas
clippingNode.inverted = YES;
// Create your polygon
CCDrawNode *polygon = [CCDrawNode node];
CGPoint polygonPoints[4] = {ccp(-50.0, -50.0), ccp(40.0, -40.0), ccp(50.0, 50.0), ccp(-40.0, 40.0)};
[polygon drawPolyWithVerts:polygonPoints count:4 fillColor:[CCColor blackColor] borderWidth:0.0 borderColor:[CCColor clearColor]];
polygon.position = ccp(0.0, 0.0);
[clippingNode addChild:polygon];
// Now the clipping node should contain your polygon with shaped-holes in it
如果我没记错的话,用
CCDrawNode
创建的实心圆不能在模具中正常工作,因此您可能需要创建自己的圆图类或使用纹理。关于ios - 在Cocos2D中在多边形中切割形孔,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22662400/