cocos2dx 描边(lua实现)
来源:互联网 发布:koala mac 编辑:程序博客网 时间:2024/05/21 08:29
local mytool = {}mytool.DEFAULT_TTF_FONT = "Arial"mytool.DEFAULT_TTF_FONT_SIZE = 24mytool.TEXT_ALIGN_LEFT = kCCTextAlignmentLeftmytool.TEXT_ALIGN_CENTER = kCCTextAlignmentCentermytool.TEXT_ALIGN_RIGHT = kCCTextAlignmentRightmytool.TEXT_VALIGN_TOP = kCCVerticalTextAlignmentTopmytool.TEXT_VALIGN_CENTER = kCCVerticalTextAlignmentCentermytool.TEXT_VALIGN_BOTTOM = kCCVerticalTextAlignmentBottommytool.COLOR_WHITE = ccc3(255, 255, 255)mytool.COLOR_BLACK = ccc3(0, 0, 0)function mytool.round(num) local floorNum = math.floor(num) local remainder = num % floorNum if remainder < 0.5 then return math.floor(num) else return math.ceil(num) endend--[[--使用 TTF 字体创建文字显示对象,并返回 CCLabelTTF 对象。可用参数:- text: 要显示的文本- font: 字体名,如果是非系统自带的 TTF 字体,那么指定为字体文件名- size: 文字尺寸,因为是 TTF 字体,所以可以任意指定尺寸- color: 文字颜色(可选),用 ccc3() 指定,默认为白色- align: 文字的水平对齐方式(可选)- valign: 文字的垂直对齐方式(可选),仅在指定了 dimensions 参数时有效- dimensions: 文字显示对象的尺寸(可选),使用 CCSize() 指定- x, y: 坐标(可选)align 和 valign 参数可用的值:- mytool.TEXT_ALIGN_LEFT 左对齐- mytool.TEXT_ALIGN_CENTER 水平居中对齐- mytool.TEXT_ALIGN_RIGHT 右对齐- mytool.TEXT_VALIGN_TOP 垂直顶部对齐- mytool.TEXT_VALIGN_CENTER 垂直居中对齐- mytool.TEXT_VALIGN_BOTTOM 垂直底部对齐~~~ lua-- 创建一个居中对齐的文字显示对象local label = mytool.newTTFLabel({ text = "Hello, World", font = "Marker Felt", size = 64, align = mytool.TEXT_ALIGN_CENTER -- 文字内部居中对齐})-- 左对齐,并且多行文字顶部对齐local label = mytool.newTTFLabel({ text = "Hello, World\n您好,世界", font = "Arial", size = 64, color = ccc3(255, 0, 0), -- 使用纯红色 align = mytool.TEXT_ALIGN_LEFT, valign = mytool.TEXT_VALIGN_TOP, dimensions = CCSize(400, 200)})~~~@param table params 参数表格对象@return CCLabelTTF CCLabelTTF对象]]function mytool.newTTFLabel(params) assert(type(params) == "table", "[framework.mytool] newTTFLabel() invalid params") local text = tostring(params.text) local font = params.font or mytool.DEFAULT_TTF_FONT local size = params.size or mytool.DEFAULT_TTF_FONT_SIZE local color = params.color or mytool.COLOR_WHITE local textAlign = params.align or mytool.TEXT_ALIGN_LEFT local textValign = params.valign or mytool.TEXT_VALIGN_CENTER local x, y = params.x, params.y local dimensions = params.dimensions assert(type(size) == "number", "[framework.mytool] newTTFLabel() invalid params.size") local label if dimensions then label = CCLabelTTF:create(text, font, size, dimensions, textAlign, textValign) else label = CCLabelTTF:create(text, font, size) end if label then label:setColor(color) function label:realign(x, y) if textAlign == mytool.TEXT_ALIGN_LEFT then label:setPosition(mytool.round(x + label:getContentSize().width / 2), y) elseif textAlign == mytool.TEXT_ALIGN_RIGHT then label:setPosition(x - mytool.round(label:getContentSize().width / 2), y) else label:setPosition(x, y) end end if x and y then label:realign(x, y) end end return labelend--[[--创建带描边效果的 TTF 文字显示对象,并返回 CCLabelTTF 对象。相比 mytool.newTTFLabel() 增加一个参数: outlineColor: 描边颜色(可选),用 ccc3() 指定,默认为黑色@param table params 参数表格对象@return CCLabelTTF CCLabelTTF对象]]function mytool.newTTFLabelWithOutline(params) assert(type(params) == "table", "[framework.mytool] newTTFLabelWithShadow() invalid params") local color = params.color or mytool.COLOR_WHITE local outlineColor = params.outlineColor or mytool.COLOR_BLACK local x, y = params.x, params.y local g = CCNode:create() params.size = params.size params.color = outlineColor params.x, params.y = 0, 0 g.shadow1 = mytool.newTTFLabel(params) g.shadow1:realign(1, 0) g:addChild(g.shadow1) g.shadow2 = mytool.newTTFLabel(params) g.shadow2:realign(-1, 0) g:addChild(g.shadow2) g.shadow3 = mytool.newTTFLabel(params) g.shadow3:realign(0, -1) g:addChild(g.shadow3) g.shadow4 = mytool.newTTFLabel(params) g.shadow4:realign(0, 1) g:addChild(g.shadow4) params.color = color g.label = mytool.newTTFLabel(params) g.label:realign(0, 0) g:addChild(g.label) function g:setString(text) g.shadow1:setString(text) g.shadow2:setString(text) g.shadow3:setString(text) g.shadow4:setString(text) g.label:setString(text) end function g:getContentSize() return g.label:getContentSize() end function g:setColor(...) g.label:setColor(...) end function g:setOutlineColor(...) g.shadow1:setColor(...) g.shadow2:setColor(...) g.shadow3:setColor(...) g.shadow4:setColor(...) end function g:setOpacity(opacity) g.label:setOpacity(opacity) g.shadow1:setOpacity(opacity) g.shadow2:setOpacity(opacity) g.shadow3:setOpacity(opacity) g.shadow4:setOpacity(opacity) end if x and y then g:setPosition(x, y) end return gend--[[--创建 cocostudio UILabel文字显示对象,并返回 UILabel 对象。@param table params 参数表格对象可用参数:- text: 要显示的文本- fontsize: 文字尺寸,- x, y: 坐标- color: 文字颜色(可选), 默认为白色 用ccc3表示- align: 文字的水平对齐方式(可选)@return CCLabelTTF UILabel对象]]function mytool.newUILabel(params)assert(type(params) == "table","[framework.mytool] newUILabel() invalid params")log("#mytool.newUILabel begin###")local color = params.color or mytool.COLOR_WHITE -- log("#######color = "..tostring(color.r))-- log("#######color = "..tostring(color.g))-- log("#######color = "..tostring(color.b))local text = params.textlocal fontsize = params.fontsizelocal uilabel = UILabel:create()local textAlign = params.align or mytool.TEXT_ALIGN_LEFTif uilabel thenuilabel:setColor(color.r, color.g, color.b)uilabel:setText(text)uilabel:setFontSize(fontsize)endfunction uilabel:realign(x, y) if textAlign == mytool.TEXT_ALIGN_LEFT then local w, h = uilabel:getSize() uilabel:setPosition(mytool.round(x+3), y) --x + w / 2 --x+3 elseif textAlign == mytool.TEXT_ALIGN_RIGHT then local w, h = uilabel:getSize() uilabel:setPosition(x - mytool.round(w / 2), y) else uilabel:setPosition(x, y) end end if x and y then label:realign(x, y) end log("#mytool.newUILabel end###") return uilabelend--[[--创建带描边效果的 cocostudio UILabel文字显示对象,并返回 UILabel 对象。@param table params 参数表格对象可用参数:- text: 要显示的文本- size: 文字尺寸,- x, y: 坐标- outlineColor : 文字描边颜色, 用ccc3() 指定, 默认为黑色- color: 文字颜色(可选),用 ccc3() 指定,默认为白色- align: 文字的水平对齐方式(可选)@return CCLabelTTF UILabel对象]]function mytool.newUILabelWithOutline(params) assert(type(params) == "table", "[framework.mytool] newUILabelWithOutline() invalid params") log("####mytool.newUILabelWithOutline(params) begin####") local widget = params.widget local r, g, b = widget:getColor() local sizew, sizeh = widget:getSize() local fontsize = params.fontSize or 28 --这里可以换成获取字体大小 local color = params.color or ccc3(r, g, b) local outlineColor = params.outlineColor or mytool.COLOR_BLACK widget = tolua.cast(widget, "UILabel") local text = widget:getStringValue() local g = UILabel:create()--Layout:create() params.color = outlineColor params.text = text params.x, params.y = 0, 0 params.fontsize = fontsize g.shadow1 = mytool.newUILabel(params) g.shadow1:realign(1, 0) g:addChild(g.shadow1) g.shadow2 = mytool.newUILabel(params) g.shadow2:realign(-1, 0) g:addChild(g.shadow2) g.shadow3 = mytool.newUILabel(params) g.shadow3:realign(0, -1) g:addChild(g.shadow3) g.shadow4 = mytool.newUILabel(params) g.shadow4:realign(0, 1) g:addChild(g.shadow4) local parent = widget:getParent() widget:removeFromParentAndCleanup(true) params.color = color g.label = mytool.newUILabel(params) g.label:realign(0, 0) g:addChild(g.label) parent:addChild(g) if x and y then g:setPosition(x, y) end log("####mytool.newUILabelWithOutline(params) end####") return gendreturn mytool
用法:
mytool = require("util.mytool.lua") local ttf = mytool.newTTFLabel{text = "卧槽xxx", x = 320, y = 640} localUnionWindow.beginInputLayer:addChild(ttf, 10)
---createtext 从cocostudio 中读出来的 local createtext = xwidget.getChild(createBtn, "text") mytool.newUILabelWithOutline{widget = createtext, outlineColor = ccc3(255, 0, 0)}
效果:
原理:描边用5个控件 来实现 上下左右 各移动一个像素显示 另一个不移动
另种方法:可以用两个控件来实现 下面的控件放大 用字体的大小算比例 最好周围大出一个像素 上面的不变
0 0
- cocos2dx 描边(lua实现)
- cocos2dx-lua实现弹幕
- cocos2dx lua 描边
- cocos2dx + lua 中实现 lua的MVC
- cocos2dx战争迷雾实现(lua)
- cocos2dx lua clone实现解析
- cocos2dx中lua实现继承详解
- cocos2dx中lua实现继承详解
- cocos2dx + Lua 实现的2048小游戏
- cocos2dx中lua实现继承详解
- Cocos2dx-lua实现单例设计模式
- cocos2dx 3.3 Lua 实现倒计时功能
- 如何实现字幕效果,cocos2dx ,Lua
- 关于cocos2dx虚拟摇杆的lua实现
- cocos2dx CCSprite高斯模糊 lua实现
- cocos2dx A*寻路算法lua实现
- 如何实现字幕效果,cocos2dx ,Lua
- cocos2dx lua实现EditBox输入框
- 优点缺点谈
- .NET也有春天及高性能网站架构实践
- linux1.0的磁盘缓存buffer cache
- Css定位
- Permutation Sequence
- cocos2dx 描边(lua实现)
- Wifi高密场馆方案及应用_付洁
- 在ASP.NET MVC 中获取当前URL、Controller、Action(集)
- Linux设备驱动之I2C架构分析
- readonly 和 disabled
- json-lib使用,JSONObject和JSONArray
- 常见算法时间复杂度
- IOS学习笔记39——拍照、从相册选图并对图片进行裁剪
- jsp与servlet区别