cocos2d-x 文字描边

来源:互联网 发布:王牌特工2 知乎 编辑:程序博客网 时间:2024/06/06 20:04
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顺序不能变



原创粉丝点击