遮罩
CCSprite* PersonalDataLayer::createMaskedSprite(CCSprite* src, CCSprite *maskSprite, CCSize maskSize)
{
assert(src);
assert(maskSprite);
CCSize srcContent = src->getContentSize();
CCSize maskContent = maskSprite->getContentSize();
CCRenderTexture * rt = CCRenderTexture::renderTextureWithWidthAndHeight(srcContent.width, srcContent.height, kTexture2DPixelFormat_RGBA8888);
float ratiow = maskSize.width / maskContent.width;
float ratioh = maskSize.height / maskContent.height;
maskSprite->setScaleX(ratiow);
maskSprite->setScaleY(ratioh);
maskSprite->setPosition(ccp(srcContent.width / 2, srcContent.height / 2));
src->setPosition(ccp(srcContent.width / 2, srcContent.height / 2));
ccBlendFunc blendFunc2 = { GL_ONE, GL_ZERO };
maskSprite->setBlendFunc(blendFunc2);
ccBlendFunc blendFunc3 = { GL_DST_ALPHA, GL_ZERO };
src->setBlendFunc(blendFunc3);
rt->begin();
maskSprite->visit();
src->visit();
rt->end();
CCSprite * retval = CCSprite::spriteWithTexture(rt->getSprite()->getTexture());
retval->setFlipY(true);
return retval;
}
//遮罩
CCSprite* maskedSprite(CCSprite* maskSprite, CCSprite* sprite)
{
CCSize size = maskSprite->getContentSize();
CCRenderTexture* render = CCRenderTexture::renderTextureWithWidthAndHeight(maskSprite->getContentSize().width,
maskSprite->getContentSize().height);
//CCLOG("---------getContentScaleFactor = %f", CCDirector::sharedDirector()->getContentScaleFactor());
maskSprite->setPosition(ccp(size.width/2, size.height*0.49f));
sprite->setPosition(ccp(sprite->getContentSize().width*0.5f, sprite->getContentSize().height*0.5f));
ccBlendFunc func1 = {GL_ONE, GL_ZERO};
ccBlendFunc func2 = {GL_DST_ALPHA, GL_ZERO};
maskSprite->setBlendFunc(func1);
sprite->setBlendFunc(func2);
render->begin();
maskSprite->visit();
sprite->visit();
render->end();
CCSprite *mySprite = CCSprite::spriteWithTexture(render->getSprite()->getTexture());
mySprite->setFlipY(true);
return mySprite;
}

浙公网安备 33010602011771号