clippingNode使用圆形的DrawNode作为stencil的时候,似乎无效

在node的clipping测试里,使用的是一个三角形作为stencil,没有问题。
但是如果使用一个圆形的DrawNode作stencil,那么结果就是clippingNode仍然显示完整的内容,没有被圆形剪切。

这个问题不知道是bug还是对于圆形需要额外的设置?

希望能回答下。

我用的cocos2dx3.2也发现这个问题了,使用DrawNode画圆形设置为模板,结果还是方形裁剪!!

不要使用drawCircle画出来会是一个空心圆。要使用drawSolidCircle。

void HelloWorld::initClippingNode()
{
    Size visibleSize = Director::getInstance()->getVisibleSize();

    auto clip=ClippingNode::create();
    clip->setInverted(true);
    clip->setAlphaThreshold(0.0f);
    this->addChild(clip);
    
    auto back=LayerColor::create(Color4B(0,0,0,200));
    clip->addChild(back);
    
    auto front=DrawNode::create();
    Color4F yellow = {1, 1, 0, 1};
//    front->drawCircle(Vec2::ZERO, 30, CC_DEGREES_TO_RADIANS(90), 50, false, yellow);
    front->drawSolidCircle(Vec2::ZERO, 30, CC_DEGREES_TO_RADIANS(90), 50, yellow);
    front->setPosition(Vec2(visibleSize.width/2, visibleSize.height/2));
    clip->setStencil(front);
}


```

我用的是cocos2dx3.2 ,DrawNode类里面没有drawSolidCircle这个方法啊。

我用的是cocos2dx3.2 ,DrawNode类里面没有drawSolidCircle这个方法啊。
我用的是drawDot() , 看test里面确实画出来的也是一个实心圆,但是用作模板就无效。

参考这个PR enhance

https://github.com/cocos2d/cocos2d-x/pull/8012

谢谢回复。有时间再试试。已经改用其他的方式解决原先的问题了。

改用图片吧,否则你那个圆画出来锯齿也一塌糊涂。

嗯。drawnode比较耗性能。segments指定了圆分段数。

            DrawNode* pDNode = DrawNode::create();
            pDNode->drawSolidRect(Vec2::ZERO, Vec2(ptCentre.x + 10, ptCentre.y + 10), Color4F(1,0,0,1));
            pDNode->setPosition(ptCentre);
            m_pPetEnergyStencil = ClippingNode::create(pDNode);

            Sprite* pSprite = Sprite::create( "petEnergy_Bottom.png" );
            m_pPetEnergyStencil->addChild(pSprite);
            GetBattleScene()->addChild(m_pPetEnergyStencil,2000);

// m_pPetEnergyCtrlBottom->setAnimation(0, “petEnergy”, true);
m_pPetEnergyStencil->setInverted(true);
m_pPetEnergyStencil->setAlphaThreshold(0.0f);
m_pPetEnergyStencil->setPosition(ptCentre);

版主,知道,我这个哪里写错了吗?为何完全遮不住,一点效果都没有