cocos2dx图片精灵裁剪圆角矩形方法
来源:互联网 发布:linux awk print 编辑:程序博客网 时间:2024/06/06 09:37
在做项目中,需要对图片进行裁剪已统一所有图片的边角,在网上查找方法结合自己的项目,书写了一个专门做裁剪的函数,供大家参考;
ClippingNode* ccDrawRoundRect(cocos2d::Sprite *bgSprite, cocos2d::Vec2 origin, cocos2d::Vec2 destination, float radius, unsigned int segments){
Sprite *thisbgSprite = bgSprite;
ClippingNode* pClip = ClippingNode::create();
pClip->setInverted(false);//设置是否反向,将决定画出来的圆是透明的还是黑色的
// this->addChild(pClip);
pClip->setAnchorPoint(Point(0, 0));
pClip->setPosition(-7, -7);
//算出1/4圆
const float coef = 0.5f * (float)M_PI / segments;
Point * vertices = new Point[segments + 1];
Point * thisVertices = vertices;
for (unsigned int i = 0; i <= segments; ++i, ++thisVertices)
{
float rads = (segments - i)*coef;
thisVertices->x = (int)(radius * sinf(rads));
thisVertices->y = (int)(radius * cosf(rads));
}
//
Point tagCenter;
float minX = MIN(origin.x, destination.x);
float maxX = MAX(origin.x, destination.x);
float minY = MIN(origin.y, destination.y);
float maxY = MAX(origin.y, destination.y);
unsigned int dwPolygonPtMax = (segments + 1) * 4;
Point * pPolygonPtArr = new Point[dwPolygonPtMax];
Point * thisPolygonPt = pPolygonPtArr;
int aa = 0;
//左上角
tagCenter.x = minX + radius;
tagCenter.y = maxY - radius;
thisVertices = vertices;
for (unsigned int i = 0; i <= segments; ++i, ++thisPolygonPt, ++thisVertices)
{
thisPolygonPt->x = tagCenter.x - thisVertices->x;
thisPolygonPt->y = tagCenter.y + thisVertices->y;
// log("%f , %f", thisPolygonPt->x, thisPolygonPt->y);
++aa;
}
//右上角
tagCenter.x = maxX - radius;
tagCenter.y = maxY - radius;
thisVertices = vertices + segments;
for (unsigned int i = 0; i <= segments; ++i, ++thisPolygonPt, --thisVertices)
{
thisPolygonPt->x = tagCenter.x + thisVertices->x;
thisPolygonPt->y = tagCenter.y + thisVertices->y;
// log("%f , %f", thisPolygonPt->x, thisPolygonPt->y);
++aa;
}
//右下角
tagCenter.x = maxX - radius;
tagCenter.y = minY + radius;
thisVertices = vertices;
for (unsigned int i = 0; i <= segments; ++i, ++thisPolygonPt, ++thisVertices)
{
thisPolygonPt->x = tagCenter.x + thisVertices->x;
thisPolygonPt->y = tagCenter.y - thisVertices->y;
// log("%f , %f", thisPolygonPt->x, thisPolygonPt->y);
++aa;
}
//左下角
tagCenter.x = minX + radius;
tagCenter.y = minY + radius;
thisVertices = vertices + segments;
for (unsigned int i = 0; i <= segments; ++i, ++thisPolygonPt, --thisVertices)
{
thisPolygonPt->x = tagCenter.x - thisVertices->x;
thisPolygonPt->y = tagCenter.y - thisVertices->y;
// log("%f , %f", thisPolygonPt->x, thisPolygonPt->y);
++aa;
}
//设置参数
static Color4F red(1, 0, 0, 1);//顶点颜色设置为红色,参数是R,G,B,透明度
//注意不要将pStencil addChild
DrawNode *pStencil = DrawNode::create();
pStencil->drawPolygon(pPolygonPtArr, dwPolygonPtMax, red, 0, red);//绘制这个多边形
pStencil->setPosition(Point(0, 0));
pClip->setStencil(pStencil);
pClip->addChild(thisbgSprite, 1);
pClip->setContentSize(thisbgSprite->getContentSize());
CC_SAFE_DELETE_ARRAY(vertices);
CC_SAFE_DELETE_ARRAY(pPolygonPtArr);
return pClip;
}
0 0
- cocos2dx图片精灵裁剪圆角矩形方法
- cocos2dx精灵裁剪显示ClippingNode
- cocos2dx精灵裁剪显示ClippingNode
- 裁剪圆角图片
- cocos2dx创建精灵的方法
- cocos2dx创建精灵的五种方法(包括使用图片名获取图片)
- cocos2dx创建精灵的五种方法(包括使用图片名获取图片)
- cocos2dx创造精灵的五种方法(包括使用图片名获取图片)
- cocos2dx创建精灵的五种方法(包括使用图片名获取图片)
- cocos2dx&lua绘制圆角矩形
- cocos2dx番外篇——更换精灵图片
- cocos2dx,精灵加载图片之后,利用缩放改变精灵大小
- 裁剪图片(方法)
- cocos2dx创建精灵的五种方法
- cocos2dx创造精灵的五种方法
- cocos2dx四种创建精灵的方法
- Cocos2dx创建精灵的5中方法
- 【cocos2dx】创建精灵的两种方法
- 浅谈算法和数据结构: 十二 无向图相关算法基础
- 【进阶】从linux到android,进程的方方面面
- HDOJ/HDU 1015 Safecracker(深搜)
- 嵌入式linux编译CPP代码环境编译配置
- 重投影误差与对称转移误差
- cocos2dx图片精灵裁剪圆角矩形方法
- Android 5.0+ 自定义普通按钮的ripple波纹效果
- IntentFilter匹配规则讲解
- 7-116 比谁跑的快(类+算法)
- HTML5 语义元素
- Github
- 浅谈算法和数据结构: 十一 哈希表
- Raymarching Distance Fields
- Activity与Fragment通信——回调方法实现