CCRenderTexture* ClassName::createStroke(CCLabelTTF* label, float size ,ccColor3B cor)
{
float RealSize = size;
CCRenderTexture* rt = CCRenderTexture::create(label->getTexture()->getContentSize().width + RealSize*2, label->getTexture()->getContentSize().height + RealSize*2);
CCPoint originalPos = label->getPosition();
ccColor3B originalColor = label->getColor();
bool originalVisibility = label->isVisible();
label->setColor(cor);
label->setVisible(true);
ccBlendFunc originalBlend = label->getBlendFunc();
ccBlendFunc tBlendFunc = {GL_SRC_ALPHA, GL_ONE };
label->setBlendFunc(tBlendFunc);
CCPoint bottomLeft = ccp(label->getTexture()->getContentSize().width * label->getAnchorPoint().x + RealSize, label->getTexture()->getContentSize().height * label->getAnchorPoint().y + RealSize);
CCPoint positionOffset = ccp(label->getTexture()->getContentSize().width * label->getAnchorPoint().x - label->getTexture()->getContentSize().width/2, label->getTexture()->getContentSize().height * label->getAnchorPoint().y - label->getTexture()->getContentSize().height/2);
CCPoint position = ccpSub(originalPos, positionOffset);
rt->begin();
for (int i=0; i<360; i+=30)
{
label->setPosition(ccp(bottomLeft.x + sin(CC_DEGREES_TO_RADIANS(i))*RealSize, bottomLeft.y +
cos(CC_DEGREES_TO_RADIANS(i))*RealSize));
label->visit();
}
rt->end();
label->setPosition(originalPos);
label->setColor(originalColor);
label->setBlendFunc(originalBlend);
label->setVisible(originalVisibility);
rt->setPosition(position);
return rt;
}
使用:
CCLabelTTF *pLabelTTF = CCLabelTTF::create( "test", "Verdana-BoldItalic", 24 );
pLabelTTF->setPosition( ccp( 200, 200 ) );
static const ccColor3B ccBlack = {0,0,0};
CCRenderTexture *pstroke = createStroke(pLabelTTF, 1,ccBlack);
addChild( pstroke,100 );
addChild( pLabelTTF,100 );//注意add顺序不能变