cocos2d实现CCLabelTTF真正字体描边效果
来源:互联网 发布:e网络卡盟 编辑:程序博客网 时间:2024/06/05 18:51
在开发游戏中,我们需要在需要在游戏中显示一个字体轮廓比较清晰的效果,我们就需要给字体的周围进行描边,让字体显示比较更加突出,我重写了cclabelttf类,使它具有描边的特效,和描边的大小以及颜色。。。
开发人员:Jason's.Alex QQ:531401335
csdn博客:http://blog.csdn.net/RuShrooM
#include "cocos2d.h"using namespace cocos2d;class StrokeLabelTTF : public cocos2d::CCNode{public:StrokeLabelTTF();~StrokeLabelTTF();public:static StrokeLabelTTF* create(const char *string, const char *fontName, float fontSize, float strokeSize,const cocos2d::ccColor3B& colStroke = cocos2d::ccc3(0, 0, 0), cocos2d::CCTextAlignment hAlignment=cocos2d::kCCTextAlignmentCenter, cocos2d::CCVerticalTextAlignment vAlignment=cocos2d::kCCVerticalTextAlignmentTop);bool initWithString(const char *label, const char *fontName, float fontSize, float fStrokeSize, const cocos2d::ccColor3B& colStroke, cocos2d::CCTextAlignment hAlignment, cocos2d::CCVerticalTextAlignment vAlignment); static StrokeLabelTTF * create(const char *string, const char *fontName, float fontSize);public:void setColor(const cocos2d::ccColor3B& color3);void setString(const char *label);void setStrokeColor(cocos2d::ccColor3B col){ m_colStroke = col; updateStroke(); }void setStrokeSize(float StrokeSize){ m_fStrokeSize = StrokeSize; updateStroke();} void setAnchorPoint(const cocos2d::CCPoint &anchorPoint);protected:void updateStroke();private:float m_fStrokeSize;cocos2d::ccColor3B m_colStroke;cocos2d::CCSprite* m_sprite;cocos2d::CCLabelTTF* m_label; CCPoint anchorPoint;};
#include "StrokeLabelTTF.h"USING_NS_CC;StrokeLabelTTF::StrokeLabelTTF():m_colStroke(ccc3(0,0,0)),m_fStrokeSize(1.0f),m_sprite(NULL),m_label(NULL) ,anchorPoint(0.5,0.5){}StrokeLabelTTF::~StrokeLabelTTF(){CC_SAFE_RELEASE_NULL(m_label);}bool StrokeLabelTTF::initWithString(const char *string, const char *fontName, float fontSize, float strokeSize,const cocos2d::ccColor3B& colStroke, CCTextAlignment hAlignment,CCVerticalTextAlignment vAlignment){m_fStrokeSize = strokeSize;m_colStroke = colStroke;m_label = CCLabelTTF::create(string, fontName, fontSize, CCSizeZero,hAlignment,vAlignment);m_label->retain();updateStroke();return true;}StrokeLabelTTF* StrokeLabelTTF::create(const char *string, const char *fontName, float fontSize, float fStrokeSize,const cocos2d::ccColor3B& colStroke ,CCTextAlignment hAlignment,CCVerticalTextAlignment vAlignment){StrokeLabelTTF *pRet = new StrokeLabelTTF();if(pRet && pRet->initWithString(string, fontName, fontSize, fStrokeSize, colStroke, hAlignment, vAlignment)){pRet->autorelease();return pRet;}CC_SAFE_DELETE(pRet);return NULL;}StrokeLabelTTF * StrokeLabelTTF::create(const char *string, const char *fontName, float fontSize){ StrokeLabelTTF *pRet = new StrokeLabelTTF(); if(pRet && pRet->initWithString(string,fontName,fontSize,1.5,ccc3(0,0,0),kCCTextAlignmentCenter,kCCVerticalTextAlignmentTop)) { pRet->autorelease(); return pRet; } CC_SAFE_DELETE(pRet); return NULL; }void StrokeLabelTTF::updateStroke(){if (m_sprite){removeChild(m_sprite, true);}CCSize textureSize = m_label->getContentSize();textureSize.width += 2 * m_fStrokeSize;textureSize.height += 2 * m_fStrokeSize;//call to clear errorglGetError();CCRenderTexture *rt = CCRenderTexture::create(textureSize.width, textureSize.height);if(!rt){CCLOG("create render texture failed !!!!");addChild(m_label);return;}ccColor3B col = m_label->getColor();m_label->setColor(m_colStroke);ccBlendFunc originalBlend = m_label->getBlendFunc();ccBlendFunc func = { GL_SRC_ALPHA, GL_ONE};m_label->setBlendFunc(func);m_label->setAnchorPoint(ccp(0.5f,0.5f));rt->begin();for(int i = 0; i < 360; i += 15){float r = CC_DEGREES_TO_RADIANS(i);m_label->setPosition(ccp(textureSize.width * 0.5f + sin(r) * m_fStrokeSize,textureSize.height * 0.5f + cos(r) * m_fStrokeSize));m_label->visit();}m_label->setColor(col);m_label->setBlendFunc(originalBlend);m_label->setPosition(ccp(textureSize.width * 0.5f, textureSize.height * 0.5f));m_label->visit();rt->end();CCTexture2D *texture = rt->getSprite()->getTexture();texture->setAliasTexParameters();m_sprite = CCSprite::createWithTexture(rt->getSprite()->getTexture());setContentSize(m_sprite->getContentSize());m_sprite->setAnchorPoint(this->anchorPoint);//------------m_sprite->setPosition(ccp(0, 0));((CCSprite *)m_sprite)->setFlipY(true);addChild(m_sprite);}void StrokeLabelTTF::setString(const char *label){if (m_label){if(0!=strcmp(label, m_label->getString())){m_label->setString(label);updateStroke();}}else{CCLOG("ERROR:CCLabelTTFStroke::setString m_label=NULL");}}void StrokeLabelTTF::setColor(const ccColor3B& color3){if (m_label){ccColor3B col = m_label->getColor();if(color3.r!=col.r || color3.g!=col.g || color3.b!=col.b){m_label->setColor(color3);updateStroke();}}else{CCLOG("ERROR:CCLabelTTFStroke::setColor m_label=NULL");}}void StrokeLabelTTF::setAnchorPoint(const cocos2d::CCPoint &anchorPoint1){ this->anchorPoint=anchorPoint1; updateStroke();}
- cocos2d实现CCLabelTTF真正字体描边效果
- cocos2d实现CCLabelTTF真正字体描边效果
- 【cocos2d-x笔记】CCLabelTTF 字体描边
- cocos2d-x 利用CCLabelTTF制作文字描边与阴影效果的实现方法
- cocos2d-x 利用CCLabelTTF制作文字描边与阴影效果的实现方法
- cocos2d-x 利用CCLabelTTF制作文字描边与阴影效果的实现方法
- cocos2d-x 利用CCLabelTTF制作文字描边与阴影效果的实现方法
- cocos2d-x CCLabelTTF文字描边与阴影效果
- cocos2d-x 利用CCLabelTTF实现文字描边
- cocos2d-x之字体描边效果shader实现
- Cocoa2d-x UILabel和CCLabelTTF字体描边(新封装单例类)
- cocos2d学习之CCLabelTTF
- CCLabelTTF制造文字描边
- COCOS2D-X字体描边
- cocos2d-x默认字体修改之CCLabelTTF, 修改为微软雅黑
- VC三两句话实现字体描边和空心效果
- cocos2d-x 打字效果 字体效果
- cocos2dx CCLabelTTF 字体自动换行
- 将驱动中的printk信息打印出来
- 如何在WPF应用程序中使用视频处理控件TVideoGrabber
- 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活
- django工程黑盒测试使用coverage.py进行覆盖率统计
- android NDK的android.mk文件的详解
- cocos2d实现CCLabelTTF真正字体描边效果
- 线程同步
- NS2.29中Tdma的实现分析
- 纪念一下生日开通CSDN_Blog
- JS------鼠标hover动作,显示与隐藏的切换
- 学习笔记----最大流的学习心得与自我理解
- 技术政治之开放接口与选边站
- 如果传统IT部门真的消亡,你该何去何从?
- vc 界面编译成win7风格