当前位置: 首页 > 工具软件 > Glow Label > 使用案例 >

cocos2d-x 3.x Label 源码分析

厍和颂
2023-12-01
cocos2d-x 源分析:
/
class CC_DLL Label : public SpriteBatchNode, public LabelProtocol
{
/**
 * 字体设置
 *     - setSystemFontName : 字体(字体名字、字体文件)
 *     - setSystemFontSize : 字体大小
 *     - setString         : 字符串内容
 *     - setTextColor      : 文字内容颜色
 **/
    //设置System Font类型的字体(字体名字、字体文件)
    //设置System Font类型的字体大小
    //请不要用于其他Label类型!(TTF、CharMap、BMFont)
    virtual void setSystemFontName(const std::string& systemFont);
    virtual void setSystemFontSize(float fontSize);
    virtual const std::string& getSystemFontName() const { return _systemFont;}
    virtual float getSystemFontSize() const { return _systemFontSize;}


    //改变字符串内容并重新渲染
    //注:如果你没有为Label设置TTF/BMFont/CharMap,会产生很大的开销
    virtual void setString(const std::string& text) override;
    virtual const std::string& getString() const override {  return _originalUTF8String; }


    //设置文字颜色,仅支持TTF和System Font
    //注:区别 Node节点的颜色
    //      Node ::setColor     : Color3B
    //      Label::setTextColor : Color4B
    virtual void setTextColor(const Color4B &color);
    const Color4B& getTextColor() const { return _textColor; }


/**
 * 获取Label的某个字符
 *     - getLetter
 *     - 不支持System Font
 **/
    //不支持System Font
    virtual Sprite* getLetter(int lettetIndex);


/**
 * 文字渲染效果
 *     - Shadow  : 阴影
 *     - Outline : 轮廓,仅支持TTF
 *     - Glow    : 发光,仅支持TTF
 **/
    //阴影Shadow(阴影颜色,相对Label的偏移,模糊度)
    //注: 其中blurRadius在3.2中并未实现
    virtual void enableShadow(const Color4B& shadowColor = Color4B::BLACK,const Size &offset = Size(2,-2), int blurRadius = 0);

    //轮廓Outline,仅支持TTF(轮廓颜色,轮廓粗细)
    virtual void enableOutline(const Color4B& outlineColor,int outlineSize = -1);

    //发光Glow,仅支持TTF
    virtual void enableGlow(const Color4B& glowColor);

    //取消阴影/轮廓/发光渲染效果
    virtual void disableEffect();


/**
 * 对齐方式
 *    > TextHAlignment : 水平对齐方式
 *        - TextHAlignment:LEFT    : 左对齐
 *        - TextHAlignment:CENTER  : 居中对齐,默认
 *        - TextHAlignment:RIGHT   : 右对齐
 *    > TextVAlignment : 垂直对齐方式
 *        - TextVAlignment::TOP    : 顶部,默认
 *        - TextVAlignment::CENTER : 中心
 *        - TextVAlignment::BOTTOM : 底部
 **/
    //设置对齐方式
    void setAlignment(TextHAlignment hAlignment) { setAlignment(hAlignment,_vAlignment);}
    void setAlignment(TextHAlignment hAlignment,TextVAlignment vAlignment);
    TextHAlignment getTextAlignment() const { return _hAlignment;}

    //设置水平对齐方式
    void setHorizontalAlignment(TextHAlignment hAlignment) { setAlignment(hAlignment,_vAlignment); }
    TextHAlignment getHorizontalAlignment() const { return _hAlignment; }

    //设置垂直对齐方式
    void setVerticalAlignment(TextVAlignment vAlignment) { setAlignment(_hAlignment,vAlignment); }
    TextVAlignment getVerticalAlignment() const { return _vAlignment; }


/**
 * Label尺寸大小
 *     - setLineBreakWithoutSpace : 开启自动换行功能
 *     - setMaxLineWidth          : 文字内容的最大行宽
 *     - setWidth                 : Label尺寸大小,宽
 *     - setHeight                : Label尺寸大小,高
 *     - setDimensions            : Label尺寸大小
 **/
    //是否开启自动换行功能
    void setLineBreakWithoutSpace(bool breakWithoutSpace);


    //最大行宽,内容超过MaxLineWidth,就会自动换行
    //前提条件: 仅在width==0时,起作用。
    //  > width == 0;
    //  > setMaxLineWidth(lineWidth);
    //  > setLineBreakWithoutSpace(true);
    //它的效果与下面是类似的.
    //  > setWidth(lineWidth);
    //  > setLineBreakWithoutSpace(true);
    //只是width==0时,就无法设置文本的对齐方式了.
    void setMaxLineWidth(unsigned int maxLineWidth);
    unsigned int getMaxLineWidth() { return _maxLineWidth;}


    //设置Label的尺寸大小
    //可以理解为Label的文本框大小
    //当setLineBreakWithoutSpace(true)时,内容超过width,会自动换行
    //并且内容支持文本的对齐方式
    //注:设置尺寸大小,使用的是setDimensions,而不是setContentSize !
    void setWidth(unsigned int width) { setDimensions(width,_labelHeight); }
    void setHeight(unsigned int height){ setDimensions(_labelWidth,height); }
    void setDimensions(unsigned int width,unsigned int height);
    unsigned int getWidth() const { return _labelWidth; }
    unsigned int getHeight() const { return _labelHeight; }  
    const Size& getDimensions() const{ return _labelDimensions; }


/**
 * v3.2 新增
 *     - setLineHeight        : 设置行间距
 *     - setAdditionalKerning : 设置文字间距
 *     - getStringLength      : 字符串内容长度
 */
    //设置行间距,不支持system font
    void setLineHeight(float height);
    float getLineHeight() const;

    //设置文字间距,不支持system font
    void setAdditionalKerning(float space);
    float getAdditionalKerning() const;

    //获取Label的字符串内容长度
    int getStringLength() const;


/**
 * 重写Node父类的方法
 *     - setBlendFunc   : 混合模式
 *     - setScale       : 放缩字体大小
 *     - addChild       : 添加子节点
 *     - getDescription : 显示Label的描述
 **/
    //设置颜色混合模式
    virtual void setBlendFunc(const BlendFunc &blendFunc) override;

    //放缩字体大小(一般用于CharMap、BMFont)
    virtual void setScale(float scale) override;
    virtual void setScaleX(float scaleX) override;
    virtual void setScaleY(float scaleY) override;
    virtual float getScaleX() const override;
    virtual float getScaleY() const override;

    //添加子节点
    virtual void addChild(Node * child, int zOrder=0, int tag=0) override;
    virtual void sortAllChildren() override;

    //Label描述
    virtual std::string getDescription() const override;
};
//
 类似资料: