本文主要是介绍cocos2dx3.2--字体标签Label,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
转自http://shahdza.blog.51cto.com/2410787/1560612
1 2 3 4 5 6 7 8 9 10 | // static Label* createWithSystemFont( const std::string& text, //字符串内容 const std::string& font, //字体(字体名称、或字体文件) float fontSize, //字号 const Size& dimensions = Size::ZERO, //label的尺寸大小,默认不设置尺寸 TextHAlignment hAlignment = TextHAlignment::LEFT, //水平对齐方式,默认左对齐::LEFT TextVAlignment vAlignment = TextVAlignment::TOP //垂直对齐方式,默认顶部 ::TOP ); // |
1 2 3 4 | // //使用系统的字体名称 "Arial" 来创建 Label* lb1 = Label::createWithSystemFont( "123abc" , "Arial" , 24); // |
1 2 3 4 5 6 7 8 9 10 | // static Label* createWithTTF( const std::string& text, const std::string& fontFile, //必须为字体文件(如"*.ttf") float fontSize, const Size& dimensions = Size::ZERO, TextHAlignment hAlignment = TextHAlignment::LEFT, TextVAlignment vAlignment = TextVAlignment::TOP ); // |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | // typedef struct _ttfConfig { std::string fontFilePath; //字体文件路径,如 "fonts/Arial.ttf" int fontSize; //字体大小,默认"12" GlyphCollection glyphs; //使用的字符集,默认"DYNAMIC" const char *customGlyphs; bool distanceFieldEnabled; //是否让字体紧凑,默认false int outlineSize; //字体轮廓大小,默认"0" //构造函数 _ttfConfig( const char * filePath = "" , int size = 12, const GlyphCollection& glyphCollection = GlyphCollection::DYNAMIC, const char *customGlyphCollection = nullptr, bool useDistanceField = false , int outline = 0 ); }TTFConfig; // |
1 2 3 4 5 6 7 8 | // static Label* createWithTTF( const TTFConfig& ttfConfig, //TTFConfig配置 const std::string& text, //字符串内容 TextHAlignment alignment = TextHAlignment::LEFT, int maxLineWidth = 0 //最大文本行宽,0表示不设置。可用于自动换行只用 ); // |
1 2 3 4 5 6 7 8 9 10 11 12 | // TTFConfig ttfConfig; ttfConfig.fontFilePath = "fonts/Marker Felt.ttf" ; //必须配置 ttfConfig.fontSize = 12; ttfConfig.distanceFieldEnabled = false ; ttfConfig.outlineSize = 0; ttfConfig.glyphs = GlyphCollection::DYNAMIC; ttfConfig.customGlyphs = nullptr; //使用TTFConfig配置,来创建TTF Label* lb3 = Label::createWithTTF(ttfConfig, "123abc" ); // |
1 2 3 4 5 6 7 8 9 | // //charMapFile : 字符资源图片png //itemWidth : 每个字符的宽 //itemHeight : 每个字符的高 //startCharMap : 图片第一个是什么字符 static Label* createWithCharMap( const std::string& charMapFile, int itemWidth, int itemHeight, int startCharMap); static Label* createWithCharMap(Texture2D* texture, int itemWidth, int itemHeight, int startCharMap); static Label* createWithCharMap( const std::string& plistFile); // |
1 2 3 4 5 | // //create 字符图片.png,每个字符宽,高,起始字符 Label* lb4 = Label::createWithCharMap( "fonts/digit.png" , 20, 20, '0' ); lb4->setString( "123456" ); //设置字符串内容 // |
1 2 3 4 5 6 7 | // //创建图片纹理Texture2D Texture2D* texture = TextureCache::getInstance()->addImage( "fonts/digit.png" ); Label* lb5 = Label::createWithCharMap(texture, 20, 20, '0' ); lb5->setString( "123456" ); //设置字符串内容 // |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // <? xml version = "1.0" encoding = "UTF-8" ?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> < plist version = "1.0" > < dict > < key >version</ key > <!-- plist版本 --> < integer >1</ integer > < key >textureFilename</ key > <!-- 字符图片资源: digit.png --> < string >digit.png</ string > < key >itemWidth</ key > <!-- 每个字符的宽: 20 --> < integer >20</ integer > < key >itemHeight</ key > <!-- 每个字符的高: 20 --> < integer >20</ integer > < key >firstChar</ key > <!-- 起始字符 : '0' --> < integer >48</ integer > </ dict > </ plist > // |
1 2 3 4 5 | // //plist的配置信息,如上所示 Label* lb6 = Label::createWithCharMap( "fonts/digit.plist" ); lb6->setString( "123456" ); // |
1 2 3 4 5 6 7 8 9 | // static Label* createWithBMFont( const std::string& bmfontFilePath, //字体文件.font const std::string& text, //内容 const TextHAlignment& alignment = TextHAlignment::LEFT, int maxLineWidth = 0, const Vec2& imageOffset = Vec2::ZERO //字符图片的起始左上角坐标。一般不要设置这个参数,因为坐标的配置均已在.font里完成 ); // |
1 2 3 | // Label* lb7 = Label::createWithBMFont( "bitmapFontTest.fnt" , "123abc" , TextHAlignment::LEFT); // |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 | // 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; }; // |
1 2 3 4 5 6 7 8 9 10 11 12 | // Label* lb = Label::createWithTTF( "123abc" , "fonts/Marker Felt.ttf" , 50); lb->setPosition(visibleSize / 2); this ->addChild(lb); lb->enableShadow(Color4B::GREEN, Size(10, 10)); //阴影 lb->enableOutline(Color4B::RED, 3); //轮廓 //lb->enableGlow(Color4B::GREEN); //发光 //取消阴影、轮廓、发光效果 //lb->disableEffect(); // |
1 2 3 4 | // lb->setLineBreakWithoutSpace( true ); lb->setMaxLineWidth(120); //最大宽度120 // |
1 2 3 4 5 | // lb->setLineBreakWithoutSpace( true ); lb->setWidth(80); //设置Label尺寸宽80 lb->setMaxLineWidth(120); //设置了Label width,这个就无效了 // |
1 2 3 4 | // lb->setLineHeight(80); lb->setAdditionalKerning(10); // |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // Label* lb = Label::createWithTTF( "123abc" , "fonts/Marker Felt.ttf" , 50); lb->setPosition(visibleSize / 2); this ->addChild(lb); //获取字符串总长度,length = 6 CCLOG( "%d" , lb->getStringLength()); //获取第1个字符 Sprite* letter1 = lb->getLetter(1); letter1->setColor(Color3B::GREEN); //设置颜色 letter1->setScale(2.0f); //放缩 //获取第4个字符 Sprite* letter4 = lb->getLetter(4); letter4->setColor(Color3B::RED); //设置颜色 letter4->runAction(RepeatForever::create(RotateBy::create(1.0f, 90))); //执行旋转动作 // |
这篇关于cocos2dx3.2--字体标签Label的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!