首页 > 其他 > 详细

cocos2dx中CCLabelTTF的描边和阴影

时间:2014-03-05 17:30:32      阅读:646      评论:0      收藏:0      [点我收藏+]

游戏中经常会用到文字描边和阴影,当cocos2dx中并没有给我们提供,下面是我参考:点击打开链接(http://blog.csdn.net/song_hui_xiang/article/details/17375279)自己弄了一个,基本上是一模一样,不喜勿喷!代码如下:

思路:多个CCLabelTTF重叠在一起。

头文件

//
//  CLabel.h
//  XXX
//
//  Created by user on 14-3-4.
//
//

#ifndef __XXX__CLabel__
#define __XXX__CLabel__

#include <iostream>
#include "cocos2d.h"

USING_NS_CC;

namespace CLabel{
    /*使用示例
     CCSize size = CCDirector::sharedDirector()->getWinSize();
     
     //创建个背景
     CCLayerColor* whiteLayer = CCLayerColor::create(ccc4(0, 205, 205, 255), size.width, size.height);
     this->addChild(whiteLayer);
     
     //创建描边
     CCLabelTTF* outline = CLabel::textAddOutline("描边 Outline", "Arial", 40, ccWHITE, 1);
     outline->setPosition(ccp(size.width*0.5, size.height*0.7));
     this->addChild(outline);
     
     //创建阴影
     CCLabelTTF* shadow = CLabel::textAddShadow("阴影 Shadow", "Arial", 40, ccWHITE, 2, 200);
     shadow->setPosition(ccp(size.width*0.5, size.height*0.5));
     this->addChild(shadow);
     
     //创建描边加阴影
     CCLabelTTF* outlineShadow = CLabel::textAddOutlineAndShadow("描边加阴影 OutlineShadow", "Arial", 40, ccWHITE, 1, 4, 200);
     outlineShadow->setPosition(ccp(size.width*0.5, size.height*0.3));
     this->addChild(outlineShadow);
     */
    
    //**************************************************************************
    // 给文字添加描边
    //**************************************************************************
    CCLabelTTF* textAddOutline(const char* string,          // 显示的文字
                               const char* fontName,        // 字体名称
                               float fontSize,              // 字体大小
                               const ccColor3B &color3,     // 字体颜色
                               float lineWidth);            // 描边宽度
    
    //**************************************************************************
    // 添加阴影
    CCLabelTTF* textAddShadow(const char* string,           // 显示的文字
                              const char* fontName,         // 字体名称
                              float fontSize,               // 字体大小
                              const ccColor3B &color3,      // 字体颜色
                              float shadowSize,             // 阴影宽度
                              float shadowOpacity);         // 阴影透明度
    //**************************************************************************
    
    //**************************************************************************
    // 既添加描边又添加阴影
    //**************************************************************************
    CCLabelTTF* textAddOutlineAndShadow(const char* string,     // 显示的文字
                                        const char* fontName,   // 字体名称
                                        float fontSize,         // 字体大小
                                        const ccColor3B &color3,// 阴影颜色
                                        float lineWidth,        // 字体宽度
                                        float shadowSize,       // 阴影宽度
                                        float shadowOpacity);   // 阴影透明度
};

#endif /* defined(__XXX__CLabel__) */

// 源文件

//
//  CLabel.cpp
//  XXX
//
//  Created by user on 14-3-4.
//
//

#include "CLabel.h"

namespace CLabel{
    /*
     制作文字描边效果是很简单的,我们写好一段文字之后,也就是创建出一个CCLabelTTF,称之为正文CCLabelTTF。然后再创建出4个CCLabelTTF,颜色为黑色,大小同正文CCLabelTTF相同,
     称之为描边CCLabelTTF。说到这大家可能已经明白了,没错,就是把4个描边CCLabelTTF放于正文CCLabelTTF的下面,分别于左右上下与正文CCLabelTTF错开,这样描边效果就实现啦。。
     
     *string     文本
     *fontName   文本字体类型
     *fontSize   文本大小
     *color3     文本颜色
     *lineWidth  所描边的宽度
     */
    CCLabelTTF* textAddOutline(const char* string, const char* fontName, float fontSize,const ccColor3B &color3,float lineWidth)
    {
        //描边CCLabelTTF 左
        CCLabelTTF* left = CCLabelTTF::create(string, fontName, fontSize);
        left->setColor(ccBLACK);
        
        //描边CCLabelTTF 右
        CCLabelTTF* right = CCLabelTTF::create(string, fontName, fontSize);
        right->setColor(ccBLACK);
        right->setPosition(ccp(left->getContentSize().width*0.5+lineWidth*2,left->getContentSize().height*0.5));
        left->addChild(right);
        
        //描边CCLabelTTF 上
        CCLabelTTF* up = CCLabelTTF::create(string, fontName, fontSize);
        up->setColor(ccBLACK);
        up->setPosition(ccp(left->getContentSize().width*0.5+lineWidth, left->getContentSize().height*0.5+lineWidth));
        left->addChild(up);
        
        //描边CCLabelTTF 下
        CCLabelTTF* down = CCLabelTTF::create(string, fontName, fontSize);
        down->setColor(ccBLACK);
        down->setPosition(ccp(left->getContentSize().width*0.5+lineWidth, left->getContentSize().height*0.5-lineWidth));
        left->addChild(down);
        
        //正文CCLabelTTF
        CCLabelTTF* center = CCLabelTTF::create(string, fontName, fontSize);
        center->setColor(color3);
        center->setPosition(ccp(left->getContentSize().width*0.5+lineWidth, left->getContentSize().height*0.5));
        left->addChild(center);
        
        return left;
    }


    /*
     给文字添加阴影,一看就懂的。。。
     *string         文本
     *fontName       文本字体类型
     *fontSize       文本大小
     *color3         文本颜色
     *shadowSize     阴影大小
     *shadowOpacity  阴影透明度
     
     */
    CCLabelTTF* textAddShadow(const char* string, const char* fontName, float fontSize,const ccColor3B &color3,float shadowSize,float shadowOpacity)
    {
        CCLabelTTF* shadow = CCLabelTTF::create(string, fontName, fontSize);
        shadow->setColor(ccBLACK);
        shadow->setOpacity(shadowOpacity);
        
        CCLabelTTF* center = CCLabelTTF::create(string, fontName, fontSize);
        center->setColor(color3);
        center->setPosition(ccp(shadow->getContentSize().width*0.5-shadowSize, shadow->getContentSize().height*0.5+shadowSize));
        shadow->addChild(center);
        
        return shadow;
    }


    //既添加描边又添加阴影
    CCLabelTTF* textAddOutlineAndShadow(const char* string, const char* fontName, float fontSize,const ccColor3B &color3,float lineWidth,float shadowSize,float shadowOpacity)
    {
        CCLabelTTF* shadow = CCLabelTTF::create(string, fontName, fontSize);
        shadow->setColor(ccBLACK);
        shadow->setOpacity(shadowOpacity);
        
        CCLabelTTF* left = CCLabelTTF::create(string, fontName, fontSize);
        left->setColor(ccBLACK);
        left->setPosition(ccp(shadow->getContentSize().width*0.5-shadowSize, shadow->getContentSize().height*0.5+shadowSize));
        shadow->addChild(left);
        
        CCLabelTTF* right = CCLabelTTF::create(string, fontName, fontSize);
        right->setColor(ccBLACK);
        right->setPosition(ccp(left->getContentSize().width*0.5+lineWidth*2,left->getContentSize().height*0.5));
        left->addChild(right);
        
        CCLabelTTF* up = CCLabelTTF::create(string, fontName, fontSize);
        up->setColor(ccBLACK);
        up->setPosition(ccp(left->getContentSize().width*0.5+lineWidth, left->getContentSize().height*0.5+lineWidth));
        left->addChild(up);
        
        CCLabelTTF* down = CCLabelTTF::create(string, fontName, fontSize);
        down->setColor(ccBLACK);
        down->setPosition(ccp(left->getContentSize().width*0.5+lineWidth, left->getContentSize().height*0.5-lineWidth));
        left->addChild(down);
        
        CCLabelTTF* center = CCLabelTTF::create(string, fontName, fontSize);
        center->setColor(color3);
        center->setPosition(ccp(left->getContentSize().width*0.5+lineWidth, left->getContentSize().height*0.5));
        left->addChild(center);
        
        return shadow;
    }
}

使用时,加上命名空间就可以拉,下面是使用示例:

     CCSize size = CCDirector::sharedDirector()->getWinSize();
     
     //创建描边
     CCLabelTTF* outline = CLabel::textAddOutline("描边 Outline", "Arial", 40, ccWHITE, 1);
     outline->setPosition(ccp(size.width*0.5, size.height*0.7));
     this->addChild(outline);
     
     //创建阴影
     CCLabelTTF* shadow = CLabel::textAddShadow("阴影 Shadow", "Arial", 40, ccWHITE, 2, 200);
     shadow->setPosition(ccp(size.width*0.5, size.height*0.5));
     this->addChild(shadow);
     
     //创建描边加阴影
     CCLabelTTF* outlineShadow = CLabel::textAddOutlineAndShadow("描边加阴影 OutlineShadow", "Arial", 40, ccWHITE, 1, 4, 200);
     outlineShadow->setPosition(ccp(size.width*0.5, size.height*0.3));
     this->addChild(outlineShadow);




cocos2dx中CCLabelTTF的描边和阴影,布布扣,bubuko.com

cocos2dx中CCLabelTTF的描边和阴影

原文:http://blog.csdn.net/xufeng0991/article/details/20482851

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!