标签:
static ClippingNode* create(Node *stencil);//create函数中传入一个模板,可以是一个sprite,也可以是一个drawNode(自定义的图形) GLfloat getAlphaThreshold() const; void setAlphaThreshold(GLfloat alphaThreshold); 这个方法比较重要。设置alpha的值,跟图片的透明度有关,默认是1,就是图片中所有像素点都显示出来。包括透明区域。一般想不显示透明区域,则设置为0.05。 下面讲的裁剪图片的方法,也可以使用一个圆形的图片,中间镂空。那么就需要设置setAlphaThreshold,如果不设置的话,裁剪出来的图片就是正方形的,是图片的实际大小。
bool isInverted() const; void setInverted(bool inverted);//显示裁剪的部分,还是被裁剪的部分
#ifndef __CirCularNode__ #define __CirCularNode__ #include <stdio.h> #include "cocos2d.h" #include "extensions/cocos-ext.h" class CirCularNode:public cocos2d::ClippingNode { public: CirCularNode(); virtual ~CirCularNode(); /** * 创建一个圆形clippingNode * * @param radius 创建的圆形半径 * * @return 返回一个剪切node */ static CirCularNode* create(float radius); /** * 创建一个圆形的clippingNode * * @param radius 创建的圆形半径 * @param sprite 需要切呈圆形的精灵 * * @return 返回一个剪切node */ static CirCularNode* create(float radius, cocos2d::Node* pNode); virtual bool init(float radius); CC_PROPERTY(cocos2d::Node*, m_clipNode, ClipNode); }; #endif
具体实现
#include "CirCularNode.h" USING_NS_CC; CirCularNode::CirCularNode() :m_clipNode(nullptr) { } CirCularNode::~CirCularNode() { CC_SAFE_RELEASE_NULL(m_clipNode); } CirCularNode* CirCularNode::create(float radius) { auto pClipNode = new CirCularNode(); if (pClipNode && pClipNode->init(radius)) { pClipNode->autorelease(); } else { delete pClipNode; pClipNode = nullptr; } return pClipNode; } bool CirCularNode::init(float radius) { if (!ClippingNode::init()) { CCLOG("CirCularNode parent init failed!"); return false; } //使用drawNode画圆形 auto circleNode = DrawNode::create(); //顶点坐标个数,在需要画大圆的时候,这个值就要相应变大一点 const int maxTrangle = 360; //顶点数组 Vec2 circleVec2[maxTrangle]; //计算圆上面的各个点的坐标 for (int i = 0; i < maxTrangle; i ++) { float x = cosf( i * (M_PI/180.f)) * radius; float y = sinf( i * (M_PI/180.f)) * radius; circleVec2[i] = Vec2(x, y); } //颜色 auto circleColor = Color4F(0, 1, 0, 1); circleNode->drawPolygon(circleVec2, maxTrangle, circleColor, 1, circleColor); //设置clippingNode的模板类 setStencil(circleNode); return true; } CirCularNode* CirCularNode::create(float radius, Node* pNode) { auto clipNode = CirCularNode::create(radius); if (clipNode) { clipNode->setClipNode(pNode); } return clipNode; } void CirCularNode::setClipNode(Node* pNode) { CC_SAFE_RELEASE_NULL(m_clipNode); m_clipNode = pNode; CC_SAFE_RETAIN(m_clipNode); addChild(pNode); } Node* CirCularNode::getClipNode() { return m_clipNode; }
cocos2dx 3.X 利用clippingNode把图片裁剪成圆形
标签:
原文地址:http://www.cnblogs.com/xyptechnology/p/5336878.html