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

Cocos2dx的截屏与遮罩

发布时间:2020-12-14 20:32:30 所属栏目:百科 来源:网络整理
导读:Cocos2dx3.2截取精灵部分; bool HelloWorld::init() { ////////////////////////////// if ( !Layer::init() ) { return false; } Size visibleSize = Director::getInstance()-getVisibleSize(); Vec2 origin = Director::getInstance()-getVisibleOrigin()

Cocos2dx3.2截取精灵部分;


bool HelloWorld::init()
{
//////////////////////////////

if ( !Layer::init() )
{
return false;
}

Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();

Point ptMid = Point(visibleSize.width/2,visibleSize.height/2);

//////底
Sprite *girl5 = Sprite::create("1.jpg");
girl5->setPosition(ptMid);
girl5->setScale(0.6);

this->addChild(girl5);

/////上层;
Sprite *cuve = Sprite::create("2.png");
cuve->setPosition(ptMid);
this->addChild(cuve);

cuve->setBlendFunc(BlendFunc{ GL_ONE,GL_SRC_ALPHA }); //设置精灵混合模式;

//////渲染;

RenderTexture *render2 = RenderTexture::create(visibleSize.width,visibleSize.height);
render2->setPosition(ptMid);
this->addChild(render2);


render2->begin();

girl5->visit();
cuve->visit();

render2->end();
render2->saveToFile("fferrff1.png",kCCImageFormatPNG); //保存渲染器里渲出的精灵;

log(FileUtils::getInstance()->getWritablePath().c_str()); //存文件的路径;

///////////////////////////////////////
return true;


}

////////////////////////////////////////////////////////////////////////'

精灵颜色混合;

作用范围只是在精灵大小的方形区域;其它区域不受精灵的影响;

只分有颜色和没颜色(透明)两部分,不是用黑白来表示;

Sprite*pSprite3=Sprite::create ("e3.png");

BlendFuncbf; //混合结构体,只有下面两个数据成员;

bf.src=GL_ONE;//源;即精灵有颜色的部分;

bf.dst=GL_ONE;//目标;即精灵没有颜色的部分;

BlendFunc pSprite3= cuve->getBlendFunc();//默认 BlendFunc{GL_ONE,GL_ONE_MINUS_SRC_ALPHA }

pSprite3->setBlendFunc(bf); //pSprite3->setBlendFunc (BlendFunc{GL_ONE, GL_ONE });

渲染是先渲染下面的精灵;然后渲染上面的;一个个精灵按顺序来;

只是自己和已经渲染的(可以看作是一张图);不要拿多个精灵来理解;

自己渲染时,自己作为源(自己有颜色的部分),已经渲染了的精灵作为目标(自己没有颜色的部分);

:

pSprite3->setBlendFunc (BlendFunc{GL_ONE, GL_ZERO });

//(自己有颜色的部分)全部显示;

//目标(自己没有颜色的部分)底图也不显示;

pSprite3->setBlendFunc (BlendFunc{GL_ZERO,GL_SRC_ALPHA }); //遮罩效果

//(自己有颜色的部分)全部不显示;结果是底图显示;

//目标(自己没有颜色的部分)采用自己的透明度(0),结果是底图也不显示;

GL_ONE //有颜色的地方全显示;1

GL_ZERO //没颜色的地方全不显示;0

GL_SRC_ALPHA //用源的透明;

GL_SRC_ COLOR; //用源的颜色;

GL_ONE_MINUS_ SRC _COLOR; //白色减源的颜色;

GL_ONE_MINUS_ SRC _ALPHA; //白色减源的透明;

GL_ DST_ALPHA;

GL_ DST_COLOR;

GL_ONE_MINUS_ DST _COLOR;

GL_ONE_MINUS_ DST _ALPHA;

(编辑:李大同)

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

    推荐文章
      热点阅读