zoukankan      html  css  js  c++  java
  • cocos2d-x 利用CCLabelTTF制作文字描边与阴影效果的实现方法

    #ifndef __HELLOWORLD_SCENE_H__
    #define __HELLOWORLD_SCENE_H__
    
    #include "cocos2d.h"
    USING_NS_CC;
    using namespace std;
    
    class HelloWorld : public CCLayer
    {
    public:
        virtual bool init();
        static CCScene* scene();
        CREATE_FUNC(HelloWorld);
        
        
        //给文字添加描边
        CCLabelTTF* textAddStroke(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 // __HELLOWORLD_SCENE_H__
    #include "HelloWorldScene.h"
    #include "SimpleAudioEngine.h"
    
    using namespace cocos2d;
    using namespace CocosDenshion;
    
    CCScene* HelloWorld::scene()
    {
        CCScene *scene = CCScene::create();
        HelloWorld *layer = HelloWorld::create();
        scene->addChild(layer);
        return scene;
    }
    bool HelloWorld::init()
    {
        if ( !CCLayer::init() )
        {
            return false;
        }
    
        
        CCSize size = CCDirector::sharedDirector()->getWinSize();
        
        //创建个背景
        CCLayerColor* whiteLayer = CCLayerColor::create(ccc4(0, 205, 205, 255), size.width, size.height);
        this->addChild(whiteLayer);
        
        //创建描边
        CCLabelTTF* outline = textAddStroke("描边 Stroke", "Arial", 40, ccWHITE, 1);
        outline->setPosition(ccp(size.width*0.5, size.height*0.7));
        this->addChild(outline);
        
        //创建阴影
        CCLabelTTF* shadow = textAddShadow("阴影 Shadow", "Arial", 40, ccWHITE, 2, 200);
        shadow->setPosition(ccp(size.width*0.5, size.height*0.5));
        this->addChild(shadow);
        
        //创建描边加阴影
        CCLabelTTF* outlineShadow = textAddOutlineAndShadow("描边加阴影 OutlineShadow", "Arial", 40, ccWHITE, 1, 4, 200);
        outlineShadow->setPosition(ccp(size.width*0.5, size.height*0.3));
        this->addChild(outlineShadow);
        
        return true;
    }
    
    /*
     制作文字描边效果是很简单的,我们写好一段文字之后,也就是创建出一个CCLabelTTF,称之为正文CCLabelTTF。然后再创建出4个CCLabelTTF,颜色为黑色,大小同正文CCLabelTTF相同,
     称之为描边CCLabelTTF。说到这大家可能已经明白了,没错,就是把4个描边CCLabelTTF放于正文CCLabelTTF的下面,分别于左右上下与正文CCLabelTTF错开,这样描边效果就实现啦。。
     
     *string     文本
     *fontName   文本字体类型
     *fontSize   文本大小
     *color3     文本颜色
     *lineWidth  所描边的宽度
     */
    CCLabelTTF* HelloWorld::textAddStroke(const char* string, const char* fontName, float fontSize,const ccColor3B &color3,float lineWidth)
    {
        //正文CCLabelTTF
        CCLabelTTF* center = CCLabelTTF::create(string, fontName, fontSize);
        center->setColor(color3);
        
        //描边CCLabelTTF 上
        CCLabelTTF* up = CCLabelTTF::create(string, fontName, fontSize);
        up->setColor(ccBLACK);
        up->setPosition(ccp(center->getContentSize().width*0.5, center->getContentSize().height*0.5+lineWidth));
        center->addChild(up,-1);
    
        //描边CCLabelTTF 下
        CCLabelTTF* down = CCLabelTTF::create(string, fontName, fontSize);
        down->setColor(ccBLACK);
        down->setPosition(ccp(center->getContentSize().width*0.5, center->getContentSize().height*0.5-lineWidth));
        center->addChild(down,-1);
        
        //描边CCLabelTTF 左
        CCLabelTTF* left = CCLabelTTF::create(string, fontName, fontSize);
        left->setPosition(ccp(center->getContentSize().width*0.5-lineWidth, center->getContentSize().height*0.5));
        left->setColor(ccBLACK);
        center->addChild(left,-1);
        
        //描边CCLabelTTF 右
        CCLabelTTF* right = CCLabelTTF::create(string, fontName, fontSize);
        right->setColor(ccBLACK);
        right->setPosition(ccp(center->getContentSize().width*0.5+lineWidth,center->getContentSize().height*0.5));
        center->addChild(right,-1);
        
        return center;
    }
    
    
    /*
     给文字添加阴影,一看就懂的。。。
     *string         文本
     *fontName       文本字体类型
     *fontSize       文本大小
     *color3         文本颜色
     *shadowSize     阴影大小
     *shadowOpacity  阴影透明度
     */
    CCLabelTTF* HelloWorld::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* HelloWorld::textAddOutlineAndShadow(const char* string, const char* fontName, float fontSize,const ccColor3B &color3,float lineWidth,float shadowSize,float shadowOpacity)
    {
        CCLabelTTF* center = textAddStroke(string, fontName, fontSize, color3, lineWidth);
        
        CCLabelTTF* shadow = CCLabelTTF::create(string, fontName, fontSize);
        shadow->setPosition(ccp(center->getContentSize().width*0.5+shadowSize, center->getContentSize().height*0.5-shadowSize));
        shadow->setColor(ccBLACK);
        shadow->setOpacity(shadowOpacity);
        center->addChild(shadow,-1);
        
        return center;
    }

    转载自http://blog.csdn.net/song_hui_xiang/article/details/17375279

  • 相关阅读:
    REPL
    java实现指数问题
    java实现指数问题
    java实现串逐位和(C++)
    java实现串逐位和(C++)
    java实现串逐位和(C++)
    java实现串逐位和(C++)
    java实现串逐位和(C++)
    手工日期计算法
    手工日期计算法
  • 原文地址:https://www.cnblogs.com/C-Plus-Plus/p/3985911.html
Copyright © 2011-2022 走看看