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;
原文链接:https://www.f2er.com/cocos2dx/344123.html