上面有篇文章是介绍利用TTF字体库生成各种格式的CCLabelTTF标签的,现在问题又来了,策划要求做一个有黑边的文字,这样会使得界面显示的文本更加清楚,这里我们就共同介绍一下黑边文字的方式。
实现黑边文字的方法有两种:
一种是两个CCLabelTTF,前面放一个,后面放一个,后面的那个CCLabelTTF放大一点,这样就会在上方的文字周边包围一圈边框,但是经过实验,这样显示的效果不是很好。
二是五个CCLabelTTF,中间放一个,然后在上下左右各方一个便宜1像素或者2像素的CCLabelTTF,经过实验,这样的效果是很好的。
这里我们让这个类继承自CCLayerColor,然后把CCLabelTTF的常用方法写进去,这样就可以做出一个自制的CCLabelTTF了,我们实现了以下方法
//设置位置
virtual void setPosition(const CCPoint& pos);
//设置文字
virtual void setString(const char *label);
//设置外边颜色
void setOutSideColor(const ccColor3B &outSideColor);
//设置中心颜色
void setInsideColor(const ccColor3B &insideColor);
//设置锚点
virtual void setAnchorPoint(const CCPoint& anchor);
//设置对其方式
void setHorizontalAlignment(CCTextAlignment alignment);
//设置文本域
void setDimensions(const CCSize &dim);
//设置偏移值
void setOffset(float offset);
//获得contentSize
virtual const CCSize &getContentSize();
//获取位置
virtual const CCPoint& getPosition();
//设置颜色
virtual void setColor(const ccColor3B& color);
这些基本都是CCLabelTTF 的基本方法,他们的意义我就不再多说了,这里只是提一个方法,就是void setOffset(float offset);这是设置周围四个CCLabelTTF偏移量的,
通过调节偏移量,可以显示不同黑边的文字。默认是1像素。
下面我就把代码粘贴出来
//
// SGCCLabelTTF.h
// Test
//
// Created by 江南岸 on 13-4-9.
//
//
/*
* 边框文字,会显示出不同颜色的边框
*/
#ifndef __Test__SGCCLabelTTF__
#define __Test__SGCCLabelTTF__
#include <iostream>
#include "cocos2d.h"
USING_NS_CC;
class SGCCLabelTTF : public CCLayerColor
{
private:
//四个方向的标签
CCLabelTTF *m_upLabel; //上
CCLabelTTF *m_downLabel; //下
CCLabelTTF *m_leftLabel; //左
CCLabelTTF *m_rightLabel; //右
CCLabelTTF *m_mainLabel; //中间
float _offset;
//内颜色
ccColor3B m_colorInside;
//外颜色
ccColor3B m_colorOutSide;
void viewDidLoad(const char *str, const char *fileFont, int fontSize);
public:
SGCCLabelTTF();
~SGCCLabelTTF();
static SGCCLabelTTF *create(const char *str,const char*fileFont,int fontSize);
//设置位置
virtual void setPosition(const CCPoint& pos);
//设置文字
virtual void setString(const char *label);
//设置外边颜色
void setOutSideColor(const ccColor3B &outSideColor);
//设置中心颜色
void setInsideColor(const ccColor3B &insideColor);
//设置锚点
virtual void setAnchorPoint(const CCPoint& anchor);
//设置对其方式
void setHorizontalAlignment(CCTextAlignment alignment);
//设置文本域
void setDimensions(const CCSize &dim);
//设置偏移值
void setOffset(float offset);
//获得contentSize
virtual const CCSize &getContentSize();
//获取位置
virtual const CCPoint& getPosition();
//设置颜色
virtual void setColor(const ccColor3B& color);
};
#endif /* defined(__Test__SGCCLabelTTF__) */
//
// SGCCLabelTTF.cpp
// Test
//
// Created by 江南岸 on 13-4-9.
//
//
#include "SGCCLabelTTF.h"
SGCCLabelTTF::SGCCLabelTTF()
{
m_downLabel = NULL;
m_upLabel = NULL;
m_leftLabel = NULL;
m_rightLabel = NULL;
m_mainLabel = NULL;
_offset = 2;
m_colorInside = ccWHITE;
m_colorOutSide = ccBLACK;
}
SGCCLabelTTF::~SGCCLabelTTF()
{
}
SGCCLabelTTF* SGCCLabelTTF::create(const char *str, const char *fileFont, int fontSize)
{
SGCCLabelTTF *label = new SGCCLabelTTF();
if(label)
{
label->viewDidLoad(str, fileFont, fontSize);
label->autorelease();
return label;
}
CC_SAFE_DELETE(label);
return label;
}
void SGCCLabelTTF::viewDidLoad(const char *str, const char *fileFont, int fontSize)
{
m_leftLabel = CCLabelTTF::create(str, fileFont, fontSize);
m_downLabel = CCLabelTTF::create(str, fileFont, fontSize);
m_upLabel = CCLabelTTF::create(str, fileFont, fontSize);
m_rightLabel = CCLabelTTF::create(str, fileFont, fontSize);
m_mainLabel = CCLabelTTF::create(str, fileFont, fontSize);
setInsideColor(m_colorInside);
setOutSideColor(m_colorOutSide);
addChild(m_leftLabel,-1);
addChild(m_rightLabel,-1);
addChild(m_upLabel,-1);
addChild(m_downLabel,-1);
addChild(m_mainLabel);
CCLayerColor::initWithColor(ccc4(255, 255, 255, 0), m_mainLabel->getContentSize().width, m_mainLabel->getContentSize().height);
}
void SGCCLabelTTF::setPosition(const CCPoint &position)
{
m_mainLabel->setPosition(position);
m_leftLabel->setPosition(ccpAdd(m_mainLabel->getPosition(), ccp(-_offset, 0)));
m_downLabel->setPosition(ccpAdd(m_mainLabel->getPosition(), ccp(0, -_offset)));
m_upLabel->setPosition(ccpAdd(m_mainLabel->getPosition(), ccp(0, _offset)));
m_rightLabel->setPosition(ccpAdd(m_mainLabel->getPosition(), ccp(_offset, 0)));
}
void SGCCLabelTTF::setString(const char *label)
{
m_mainLabel->setString(label);
m_upLabel->setString(label);
m_downLabel->setString(label);
m_leftLabel->setString(label);
m_rightLabel->setString(label);
}
void SGCCLabelTTF::setOutSideColor(const ccColor3B &outSideColor)
{
m_colorOutSide = outSideColor;
m_upLabel->setColor(outSideColor);
m_downLabel->setColor(outSideColor);
m_rightLabel->setColor(outSideColor);
m_leftLabel->setColor(outSideColor);
}
void SGCCLabelTTF::setInsideColor(const ccColor3B &insideColor)
{
m_mainLabel->setColor(insideColor);
m_colorInside = insideColor;
}
void SGCCLabelTTF::setAnchorPoint(const CCPoint& anchor)
{
m_mainLabel->setAnchorPoint(anchor);
m_upLabel->setAnchorPoint(anchor);
m_downLabel->setAnchorPoint(anchor);
m_rightLabel->setAnchorPoint(anchor);
m_leftLabel->setAnchorPoint(anchor);
}
void SGCCLabelTTF::setHorizontalAlignment(CCTextAlignment alignment)
{
m_mainLabel->setHorizontalAlignment(alignment);
m_upLabel->setHorizontalAlignment(alignment);
m_downLabel->setHorizontalAlignment(alignment);
m_leftLabel->setHorizontalAlignment(alignment);
m_rightLabel->setHorizontalAlignment(alignment);
}
//设置文本域
void SGCCLabelTTF::setDimensions(const CCSize &dim)
{
m_mainLabel->setDimensions(dim);
m_upLabel->setDimensions(dim);
m_downLabel->setDimensions(dim);
m_leftLabel->setDimensions(dim);
m_rightLabel->setDimensions(dim);
}
void SGCCLabelTTF::setOffset(float offset)
{
_offset = offset;
setPosition(m_mainLabel->getPosition());
}
const CCSize &SGCCLabelTTF::getContentSize()
{
return m_mainLabel->getContentSize();
}
const CCPoint& SGCCLabelTTF::getPosition()
{
return m_mainLabel->getPosition();
}
void SGCCLabelTTF::setColor(const ccColor3B& color)
{
m_colorInside = color;
m_mainLabel->setColor(color);
}
SGCCLabelTTF *label = SGCCLabelTTF::create("测试SGCCLabelTTF的黑边效果", "Arial", 50);
//设置边框的颜色为红色
label->setOutSideColor(ccRED);
//设置内部颜色为黄色
label->setColor(ccYELLOW);
//把偏移值设置2像素
label->setOffset(2);
//设置位置
label->setPosition(ccp(600, 300));
addChild(label);