cocos2dx图片圆形裁剪_Facebook头像登录圆形裁剪

Facebook 登录头像,或是其他需要裁剪成圆形图片的时候,基于cocos2dx引擎的,可以采用这个类,直接上代码:

//--------------------------------------------------H文件

#ifndef CirCularNode_h

#define CirCularNode_h

 

#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 /* CirCularNode_hpp */

 

//--------------------------------------------------CPP文件

#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() const

{

    return m_clipNode;

}

 

如有错误,大家可以一起交流

 联系方式 qq: 940299880

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值