Cocoa2d-x UILabel和CCLabelTTF字体描边(新封装单例类)


废话不多少说,直接看代码才是王道,这么简单,没可能说看不懂的~~~~~~~~~~~~~~~


//FontStroke.h

#pragma once

#include "cocos2d.h"
#include "cocos-ext.h"

USING_NS_CC;
USING_NS_CC_EXT;

enum FontSizeType
{
	Type_1 = 1,
	Type_2 = 2,
	Type_3 = 3
};

class FontStroke
{
public:
	static FontStroke* getInstance();

	//---先把需要描边的字体的所以属性都设置好才使用描边函数,如果字体有变化,那么重新调用函数重新描边就可以了---//
	//---------label 需要描边的字体指针, fontSize 需要描边的字体大小, type 描边大小, StrokeColor 描边的颜色----------------//

	void setUILabelStroke(UILabel* label, int fontSize, FontSizeType type = Type_1, ccColor3B StrokeColor=ccc3(0,0,0));

	void setCCLabelTTFStroke(CCLabelTTF* label, FontSizeType type = Type_1, ccColor3B StrokeColor=ccc3(0,0,0));

private:
	FontStroke();
	~FontStroke();

	static FontStroke* instance;

};

#define FONTSTROKE FontStroke::getInstance()

//FontStroke.cpp

#include "FontStroke.h"


FontStroke* FontStroke::instance = NULL;

FontStroke::FontStroke()
{
}


FontStroke::~FontStroke()
{
}

FontStroke* FontStroke::getInstance()
{
	if(instance == NULL)
	{
		instance = new FontStroke();
	}

	return instance;
}

void FontStroke::setUILabelStroke(UILabel* label, int fontSize, FontSizeType type, ccColor3B StrokeColor)
{
	if(label == NULL)
		return;
	label->removeAllChildren();

	int  dir[4][2]={-type,0, type,0, 0,-type, 0,type};
	for(int i=0; i<4; i++)
	{
		UILabel* label_0 = UILabel::create();
		label_0->setAnchorPoint(label->getAnchorPoint());
		label_0->setSize(label->getSize());
		label_0->setFontSize(fontSize);
		label_0->setText(label->getStringValue());
		label->addChild(label_0);
		label_0->setPosition(ccp(dir[i][0], dir[i][1]));
		label_0->setColor(StrokeColor);
	}

	UILabel* label_0 = UILabel::create();
	label_0->setAnchorPoint(label->getAnchorPoint());
	label_0->setSize(label->getSize());
	label_0->setFontSize(fontSize);
	label_0->setText(label->getStringValue());
	label->addChild(label_0);
	label_0->setColor(label->getColor());

}

void FontStroke::setCCLabelTTFStroke(CCLabelTTF* label, FontSizeType type,ccColor3B StrokeColor)
{
	if(label == NULL)
		return;
	label->removeAllChildren();

	int  dir[4][2]={-type,0, type,0, 0,-type, 0,type};
	for(int i=0; i<4; i++)
	{
		CCLabelTTF* label_0 = CCLabelTTF::create(label->getString(),label->getFontName(),label->getFontSize());
		label_0->setAnchorPoint(label->getAnchorPoint());
		label->addChild(label_0);
		label_0->setPosition(ccp(label->getContentSize().width/2+dir[i][0], label->getContentSize().height/2+dir[i][1]));
		label_0->setColor(StrokeColor);
	}

	CCLabelTTF* label_0 = CCLabelTTF::create(label->getString(),label->getFontName(),label->getFontSize());
	label_0->setAnchorPoint(label->getAnchorPoint());
	label->addChild(label_0);
	label_0->setColor(label->getColor());
	label_0->setPosition(ccp(label->getContentSize().width/2, label->getContentSize().height/2));

}

使用方法:

	UILabel* ll = dynamic_cast<UILabel*>(m_pLayer->getWidgetByName("Label_49"));
	FONTSTROKE->setUILabelStroke(ll,32);

	CCLabelTTF* ttf = CCLabelTTF::create("132456", "黑体", 30);
	FONTSTROKE->setCCLabelTTFStroke(ttf);

欧耶!!!就这样结束鸟

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值