https://blog.csdn.net/wwj_748/article/details/38587241
本篇博客介绍Cocos2d-x 3.2中Lua测试项目中的FontTest例子,主要使用了字体文件来创建我们想要的字体样式:
第一个参数为文本,第二参数为ttf字体文件,第三个参数为字体大小,第四个参数为块大小,第五个参数为文本横向对齐方式,第六个惨为文本纵向对齐方式。
例子效果图:
示例代码:(注:单独文件不可运行,具体可参考lua-tests)
- --4个标签的Tag
- local kTagLabel1 = 0
- local kTagLabel2 = 1
- local kTagLabel3 = 2
- local kTagLabel4 = 3
- -- 字体列表
- local fontList = {
- "fonts/A Damn Mess.ttf",
- "fonts/Abberancy.ttf",
- "fonts/Abduction.ttf",
- "fonts/Paint Boy.ttf",
- "fonts/Schwarzwald Regular.ttf",
- "fonts/Scissor Cuts.ttf"
- }
- local fontCount = table.getn(fontList) -- 获得表元素个数
- cclog("font count = "..fontCount)
- local vAlignIdx = 1
- local verticalAlignment = {
- cc.VERTICAL_TEXT_ALIGNMENT_TOP, -- 对齐顶部
- cc.VERTICAL_TEXT_ALIGNMENT_CENTER, -- 居中对齐
- cc.VERTICAL_TEXT_ALIGNMENT_BOTTOM, -- 底部对齐
- }
- local vAlignCount = table.getn(verticalAlignment)
- --[[
- ===============
- 显示字体
- ===============
- ]]--
- local function showFont(ret, pFont)
- cclog("vAlignIdx="..vAlignIdx)
- local s = cc.Director:getInstance():getWinSize()-- 窗口大小
- local blockSize = cc.size(s.width/3, 200)-- 块大小
- local fontSize = 26--字体大小
- -- 根据Tag移除子节点
- ret:removeChildByTag(kTagLabel1, true)
- ret:removeChildByTag(kTagLabel2, true)
- ret:removeChildByTag(kTagLabel3, true)
- ret:removeChildByTag(kTagLabel4, true)
- -- static Label* createWithTTF(const std::string & text, const std::string & fontFile, float fontSize, const Size & dimensions = Size::ZERO,
- --TextHAlignment hAlignment = TextHAlignment::LEFT,TextVAlignment vAlignment = TextVAlignment::TOP)
- -- 第一个参数为文本,第二个参数为字体样式,第三个参数为字体大小,第四个参数为块大小,第五个参数为文本横向对齐,第六个参数为文本纵向对齐
- local top = cc.Label:createWithTTF(pFont, pFont, 24)
- local left = cc.Label:createWithTTF("alignment left", pFont, fontSize,
- blockSize, cc.TEXT_ALIGNMENT_LEFT, verticalAlignment[vAlignIdx])
- local center = cc.Label:createWithTTF("alignment center", pFont, fontSize,
- blockSize, cc.TEXT_ALIGNMENT_CENTER, verticalAlignment[vAlignIdx])
- local right = cc.Label:createWithTTF("alignment right", pFont, fontSize,
- blockSize, cc.TEXT_ALIGNMENT_RIGHT, verticalAlignment[vAlignIdx])
- -- 创建颜色层,第一个参数是颜色,第二个参数为宽度,第三个参数为高度
- local leftColor = cc.LayerColor:create(cc.c4b(100, 100, 100, 255), blockSize.width, blockSize.height)
- local centerColor = cc.LayerColor:create(cc.c4b(200, 100, 100, 255), blockSize.width, blockSize.height)
- local rightColor = cc.LayerColor:create(cc.c4b(100, 100, 200, 255), blockSize.width, blockSize.height)
- -- 忽略锚点对位置的影响 ,如果为true,锚点为(0,0)
- leftColor:ignoreAnchorPointForPosition(false)
- centerColor:ignoreAnchorPointForPosition(false)
- rightColor:ignoreAnchorPointForPosition(false)
- top:setAnchorPoint(cc.p(0.5, 1)) -- 设置锚点(0.5,1)
- left:setAnchorPoint(cc.p(0,0.5))
- leftColor:setAnchorPoint(cc.p(0,0.5))
- center:setAnchorPoint(cc.p(0,0.5))
- centerColor:setAnchorPoint(cc.p(0,0.5))
- right:setAnchorPoint(cc.p(0,0.5))
- rightColor:setAnchorPoint(cc.p(0,0.5))
- top:setPosition(cc.p(s.width/2,s.height-20)) -- 设置显示位置
- left:setPosition(cc.p(0,s.height/2))
- leftColor:setPosition(left:getPosition())
- center:setPosition(cc.p(blockSize.width, s.height/2))
- centerColor:setPosition(center:getPosition())
- right:setPosition(cc.p(blockSize.width*2, s.height/2))
- rightColor:setPosition(right:getPosition())
- ret:addChild(leftColor, -1)
- ret:addChild(left, 0, kTagLabel1)
- ret:addChild(rightColor, -1)
- ret:addChild(right, 0, kTagLabel2)
- ret:addChild(centerColor, -1)
- ret:addChild(center, 0, kTagLabel3)
- ret:addChild(top, 0, kTagLabel4)
- end
- local isFirst = true
- local originCreateLayer = createTestLayer
- local function createTestLayer()
- if isFirst == false then
- if Helper.index == 1 then
- vAlignIdx = vAlignIdx % vAlignCount + 1
- end
- else
- isFirst = false
- end
- local ret = originCreateLayer("")
- showFont(ret, fontList[Helper.index])
- return ret
- end
- function FontTestMain()
- cclog("FontTestMain")
- Helper.index = 1
- vAlignIdx = 1
- local scene = cc.Scene:create()
- -- 创建方法表
- Helper.createFunctionTable = {
- createTestLayer,
- createTestLayer,
- createTestLayer,
- createTestLayer,
- createTestLayer,
- createTestLayer
- }
- scene:addChild(createTestLayer()) -- 添加测试层
- scene:addChild(CreateBackMenuItem())--添加后退按钮
- return scene
- end