游戏中经常会使用一些mask, 来做遮罩,实现不规则图的显示,在cocos2d-x中

函数实现如下:

.h

staticCCSprite*createMaskedSprite(CCSprite*src,constchar*maskFile);

.cpp

CCSprite*GOEUtilies::createMaskedSprite(CCSprite*src,constchar*maskFile){CCSprite*mask=CCSprite::create(maskFile);assert(src);assert(mask);CCSizesrcContent=src->getContentSize();CCSizemaskContent=mask->getContentSize();CCRenderTexture*rt=CCRenderTexture::create(srcContent.width,srcContent.height,kTexture2DPixelFormat_RGBA8888);floatratiow=srcContent.width/maskContent.width;floatratioh=srcContent.height/maskContent.height;mask->setScaleX(ratiow);mask->setScaleY(ratioh);mask->setPosition(ccp(srcContent.width/2,srcContent.height/2));src->setPosition(ccp(srcContent.width/2,srcContent.height/2));ccBlendFuncblendFunc2={GL_ONE,GL_ZERO};mask->setBlendFunc(blendFunc2);ccBlendFuncblendFunc3={GL_DST_ALPHA,GL_ZERO};src->setBlendFunc(blendFunc3);rt->begin();mask->visit();src->visit();rt->end();CCSprite*retval=CCSprite::createWithTexture(rt->getSprite()->getTexture());retval->setFlipY(true);returnretval;}

使用方法为:

GOEUtilies::createMaskedSprite(sprite,"mask.png");