cocos2dx中的ClippingNode,头像裁成圆形显示

直接上代码

            auto headImg = ImageView::create();//首先确定模板,这个是头像的显示控件
            headImg->setAnchorPoint(Vec2(0.5, 0.5));//设置锚点
            headImg->setPosition(Vec2(0, 0));//位置
            headImg->setContentSize(size);//大小
            setHeadImage(headImg, "", 1);//头像的加载接口,直接loadTexture

            auto pClipNode = ClippingNode::create();//裁剪节点
            pClipNode->setAnchorPoint(Vec2(0.5, 0.5));
            donghuaPanel->addChild(pClipNode);//将节点加到layer上
            pClipNode->addChild(headImg);//将内容层加载裁剪节点上
            pClipNode->setPosition(Vec2(donghuaSize.width/2,donghuaSize.height/2));

            auto pScentilCircle = Sprite::create("res/HunderdPeopleRoom/stencil.png");//设置裁剪模板
            float scale1 = pScentilCircle->getContentSize().width /(headImg->getContentSize().width);//设置头像裁剪后的X方向的缩放大小
            float scale2 = pScentilCircle->getContentSize().height / (headImg->getContentSize().height);//设置头像裁剪后的Y方向的缩放大小
            headImg->setScaleX(scale1);
            headImg->setScaleY(scale2);
            pClipNode->setStencil(pScentilCircle);//设置裁剪节点的模板
            pClipNode->setInverted(false);// > false :显示被模板裁剪下来的底板内容。默认为false。  > true  :显示剩余部分。//  //默认为false  //表示显示被裁剪下来的底板内容
            pClipNode->setAlphaThreshold(0.8f);//只有模板(stencil)中像素的alpha值大于alpha阈值时,内容才会被绘制。alpha阈值(alphaThreshold):取值范围[0,1]。 默认为 1 ,表示alpha测试默认关闭,即全部绘制。若不是1  ,表示只绘制模板中,alpha像素大于alphaThreshold的内容。

参考链接:>https://blog.51cto.com/shahdza/1561937

你可能感兴趣的:(cocos2dx中的ClippingNode,头像裁成圆形显示)