加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2dx 利用遮罩(蒙版)CCLayerColor制作及抠图

发布时间:2020-12-14 19:40:10 所属栏目:百科 来源:网络整理
导读:制作一个类似遮罩的效果,然后抠出不该被遮挡的部分 CCSize visibleSize = CCDirector::sharedDirector()-getVisibleSize(); //背景图 CCSprite* sp = CCSprite::create("PIC_BJ_CJ4.png"); sp-setPosition(ccp(640,400)); addChild(sp); //创建剪裁节点 CCC

制作一个类似遮罩的效果,然后抠出不该被遮挡的部分

CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();

//背景图
CCSprite* sp = CCSprite::create("PIC_BJ_CJ4.png");
sp->setPosition(ccp(640,400));
addChild(sp);

//创建剪裁节点
CCClippingNode* pClip = CCClippingNode::create();


//设置是否反向,将决定画出来的圆是透明的还是黑色的

pClip->setInverted(true);
addChild(pClip);

//图层添加到剪裁节点上
CCLayerColor* pLayer = CCLayerColor::create(ccc4(0,110));
pClip->addChild(pLayer);pLayer->setAnchorPoint(ccp(0.5,0.5));

//制作一个圆的数据
ccColor4F color = {0,0};//R G B 透明度
float radius = 55.0f;//半径
const int nCount = 200; //设置顶点数, 设圆有200个顶点
const float angel = 2.0f * (float)M_PI/nCount; //两个顶点与中心的夹角(弧度)
CCPoint circle[nCount];
for (int i=0; i<nCount; i++)
{
float radian = i * angel;
circle[i] = ccp(radius * cosf(radian),radius * sinf(radian));
}

//制作一个四边形的数据

const int Count = 4;
static CCPoint pos[Count]; //多变形各点坐标 相对于postion的偏移
CCPoint center(visibleSize.width/2,visibleSize.height/2);
pos[0] = ccp(540,500);
pos[1] = ccp(center.x + 100,center.y + 100);
pos[2] = ccp(center.x + 100,center.y - 100);
pos[3] = ccp(center.x - 100,center.y - 100);


//绘制四边形
pStencil = CCDrawNode::create();
//pStencil->drawPolygon(circle,nCount,color,color); //绘制那个圆
//pStencil->setPosition(visibleSize.width/2,visibleSize.height/2); //数组circle的坐标是相对positon的偏移

pStencil->drawPolygon(pos,Count,color); //绘制那个四边形

pClip->setStencil(pStencil); //抠出这个多边形

以上整个代码在init中就好

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读