= =唔
--[[
local labelEx = require("ui.ui_label_ex"):create(300) -- width
l:addChild(labelEx, 100)
labelEx:setPosition(100, self.visibleSize.height)
labelEx:setString("普通文字$C<3>颜色$C<1>普通颜色$S<36>大小$S<0>普通大小$I<101>←图片$B<button>按钮$E<99>表情\n换\n行")
]]--
local UILabelEx = class("UILabelEx", require("ui.ui_common"))
-- 控制字符
UILabelEx.C_CHR = "$"
-- 单字显示时间间隔
UILabelEx.WAIT_FOR_MESSAGE = 5 / 60
-- 默认字号
UILabelEx.DEFAULT_FONT_SIZE = 24
-- 行间距
UILabelEx.DEFAULT_LINE_HEIGHT = 12
function UILabelEx:ctor(width, show_fast)
UILabelEx.super.ctor(self, "")
self._defaultFontSize = UILabelEx.DEFAULT_FONT_SIZE
self._lineHeight = UILabelEx.DEFAULT_LINE_HEIGHT
self._width = width
self._show_fast = not not show_fast
self._height = self._defaultFontSize
self._rootWgt = ccui.Layout:create()
self:addChild(self._rootWgt, 100)
self:clear()
end
function UILabelEx:clear()
self._contentStr = ""
self._texts = self._texts or {} -- 文字
self._images = self._images or {} -- 图片
self._widgets = self._widgets or {} -- 按钮等
self._armatures = self._armatures or {} -- 动画
self._contents = self._contents or {} -- 包含文字图片等实际顺序的数组
self._currentLine = self._currentLine or {} -- 渲染中的本行元素
self._strIndex = 1 -- 遍历的当前字符
self._currentColor = 1 -- 当前文字颜色
self._currentFontSize = self._defaultFontSize -- 当前文字大小
for k, v in pairs(self._texts) do
v:removeFromParent()
self._texts[k] = nil
end
for k, v in pairs(self._images) do
v:removeFromParent()
self._images[k] = nil
end
for k, v in pairs(self._widgets) do
v:removeFromParent()
self._widgets[k] = nil
end
for k, v in pairs(self._armatures) do
v:removeFromParent()
self._armatures[k] = nil
end
self._texts = {}
self._images = {}
self._widgets = {}
self._armatures = {}
self._contents = {}
self._renderPos = {
x = 0,
y = 0,
maxHeight = self._defaultFontSize -- 记录本行最大高度
}
self._currentLine = {}
if self._scheduleShow ~= nil then
cc.Director:getInstance():getScheduler():unscheduleScriptEntry(self._scheduleShow)
end
self._scheduleShow = nil
self._showSeq = 0
end
-- 判断utf8字符byte长度
-- 0xxxxxxx - 1 byte
-- 110yxxxx - 192, 2 byte
-- 1110yyyy - 225, 3 byte
-- 11110zzz - 240, 4 byte
local function chsize(char)
if not char then
print("not char")
return 0
elseif char > 240 then
return 4
elseif char > 225 then
return 3
elseif char > 192 then
return 2
else
return 1
end
end
-- 计算utf8字符串字符数, 各种字符都按一个字符计算
-- 例如utf8len("1你好") => 3
local function utf8len(str)
local len = 0
local currentIndex = 1
while currentIndex <= #str do
local char = string.byte(str, currentIndex)
currentIndex = currentIndex + chsize(char)
len = len +1
end
return len
end
-- 截取utf8 字符串
-- str: 要截取的字符串
-- startChar: 开始字符下标,从1开始
-- numChars: 要截取的字符长度
local function utf8sub(str, startChar, numChars)
local startIndex = 1
while startChar > 1 do
local char = string.byte(str, startIndex)
startIndex = startIndex + chsize(char)
startChar = startChar - 1
end
local currentIndex = startIndex
while numChars > 0 and currentIndex <= #str do
local char = string.byte(str, currentIndex)
currentIndex = currentIndex + chsize(char)
numChars = numChars -1
end
return str:sub(startIndex, currentIndex - 1)
end
function UILabelEx:onEnter()
self:ignoreAnchorPointForPosition(false)
self:setAnchorPoint(0, 1)
end
function UILabelEx:onExit()
self:clear()
end
-- 根据代码取文字颜色
function UILabelEx:getColor(code)
code = code or 1
local colors = {
cc.c3b(255, 255, 255), -- 白色
cc.c3b(0, 0, 0), -- 黑色
cc.c3b(255, 0, 0), -- 红色
cc.c3b(0, 255, 0), -- 绿色
cc.c3b(0, 0, 255), -- 蓝色
cc.c3b(0, 255, 255) -- 黄色
}
return colors[code] or colors[1]
end
function UILabelEx:setDefaultFontSize(size)
size = size or self._defaultFontSize
if size <= 0 then size = self._defaultFontSize end
self._defaultFontSize = size
end
function UILabelEx:setString(str)
self:clear()
self._contentStr = str
self:refresh()
self._scheduleShow = cc.Director:getInstance()
:getScheduler()
:scheduleScriptFunc(handler(self, self.scheduleShow),
UILabelEx.WAIT_FOR_MESSAGE,
false)
end
--[[
"普通文字\eC[color]颜色\eC[1]普通\n颜色\eS[size]大小\eS[24]普通大小\eI[img]←图片\eB[button]按钮\eE[emj]表情"
]]--
function UILabelEx:refresh()
print(utf8len(self._contentStr))
while self._strIndex <= utf8len(self._contentStr) do
self:progressContentString()
end
if self._show_fast then self._seq = #self._contents end
self:nextLine()
self._height = self._renderPos.y
self._rootWgt:ignoreAnchorPointForPosition(false)
self._rootWgt:setAnchorPoint(cc.p(0, 1))
self._rootWgt:setBackGroundColorType(ccui.LayoutBackGroundColorType.solid)
self._rootWgt:setBackGroundColor(cc.c3b(128, 128, 128))
self._rootWgt:setContentSize(self._width, self._height)
end
-- 处理特殊字符
function UILabelEx:progressContentString()
local str = utf8sub(self._contentStr, self._strIndex, 1)
self._strIndex = self._strIndex + 1
-- print("str:"..str)
if str == "\r" then -- 回车
return
elseif str == "\n" then -- 换行
self:progressNewLine()
elseif str == UILabelEx.C_CHR then -- 控制符
-- 处理中会影响self._strIndex
self:progressControlChar()
else -- 普通文字
self:progressNormalText(str)
end
end
-- 换行
function UILabelEx:progressNewLine()
self:nextLine()
end
-- 控制符
function UILabelEx:progressControlChar()
local chr = utf8sub(self._contentStr, self._strIndex, 1)
self._strIndex = self._strIndex + 1
chr = string.upper(chr)
-- print("char:"..chr)
local progressFlag = false -- 是否正常解析
local s, e, val = string.find(self._contentStr, "<(.-)>", string.len(utf8sub(self._contentStr, 1, self._strIndex)))
if val and s == string.len(utf8sub(self._contentStr, 1, self._strIndex)) then
progressFlag = true
print("val:"..(val ~= nil and val or "nil"))
if chr == "C" then
progressFlag = self:changeFontColor(tonumber(val)) -- 修改颜色
elseif chr == "S" then
progressFlag = self:changeFontSize(tonumber(val)) -- 修改字号
elseif chr == "I" then
progressFlag = self:progressImage(tonumber(val)) -- 插入图片
elseif chr == "B" then
progressFlag = self:progressBtn(val) -- 插入按钮
elseif chr == "E" then
progressFlag = self:progressEmoji(tonumber(val)) -- 插入表情
end
end
if progressFlag then
self._strIndex = self._strIndex + utf8len(val) + 2
else -- 处理失败,当做通常字符处理
self._strIndex = self._strIndex - 2
local str = utf8sub(self._contentStr, self._strIndex, 1)
self._strIndex = self._strIndex + 1
self:progressNormalText(str)
end
end
-- 普通文字
function UILabelEx:progressNormalText(chr)
print("progress normal:"..chr)
local uiText = ccui.Text:create()
uiText:setString(chr)
uiText:setVisible(self._show_fast)
uiText:setFontSize(self._currentFontSize)
uiText:setColor(self:getColor(self._currentColor))
self:addChild(uiText, 100)
if uiText:getContentSize().width > self._width then
print("too big width, scaled")
uiText:setScale(self._width / uiText:getContentSize().width)
end
if self._renderPos.x + uiText:getContentSize().width > self._width then
self:nextLine()
end
self:setElemPosition(uiText, self._renderPos.x, self._renderPos.y)
self._renderPos.x = self._renderPos.x + uiText:getContentSize().width
self._renderPos.maxHeight = (self._renderPos.maxHeight > uiText:getContentSize().height) and self._renderPos.maxHeight or uiText:getContentSize().height
self._texts[#self._texts + 1] = uiText
self._contents[#self._contents + 1] = uiText
self._currentLine[#self._currentLine + 1] = uiText
return true
end
function UILabelEx:changeFontColor(code)
if not code then return false end
self._currentColor = code
return true
end
function UILabelEx:changeFontSize(code)
if not code then return false end
if code <= 0 then code = self._defaultFontSize end
self._currentFontSize = code
return true
end
function UILabelEx:progressImage(code)
if not code then return end
print("progress image:"..code)
local image = t_image[code]
if not image then return false end
cc.SpriteFrameCache:getInstance():addSpriteFrames(image.plist)
local uiImage = ccui.ImageView:create()
uiImage:loadTexture(image.name, ccui.TextureResType.plistType)
uiImage:setVisible(self._show_fast)
self:addChild(uiImage, 100)
if uiImage:getContentSize().width > self._width then
print("too big width, scaled")
uiImage:setScale(self._width / uiImage:getContentSize().width)
end
if self._renderPos.x + uiImage:getContentSize().width > self._width then
self:nextLine()
end
self:setElemPosition(uiImage, self._renderPos.x, self._renderPos.y)
self._renderPos.x = self._renderPos.x + uiImage:getContentSize().width
self._renderPos.maxHeight = (self._renderPos.maxHeight > uiImage:getContentSize().height) and self._renderPos.maxHeight or uiImage:getContentSize().height
self._images[#self._images + 1] = uiImage
self._contents[#self._contents + 1] = uiImage
self._currentLine[#self._currentLine + 1] = uiImage
return true
end
function UILabelEx:progressBtn(str)
return false
end
function UILabelEx:progressEmoji(code)
if not code then return false end
print("progress emoji:"..code)
local animation = t_animation[code]
if not animation then return false end
ccs.ArmatureDataManager:getInstance():addArmatureFileInfo(animation.json)
local armature = ccs.Armature:create(animation.name)
armature:getAnimation():play("effect")
armature:setVisible(self._show_fast)
self:addChild(armature, 100)
if armature:getContentSize().width > self._width then
print("too big width, scaled")
armature:setScale(self._width / armature:getContentSize().width)
end
if self._renderPos.x + armature:getContentSize().width > self._width then
self:nextLine()
end
self:setElemPosition(armature, self._renderPos.x, self._renderPos.y)
self._renderPos.x = self._renderPos.x + armature:getContentSize().width
self._renderPos.maxHeight = (self._renderPos.maxHeight > armature:getContentSize().height) and self._renderPos.maxHeight or armature:getContentSize().height
self._armatures[#self._armatures + 1] = armature
self._contents[#self._contents + 1] = armature
self._currentLine[#self._currentLine + 1] = armature
return true
end
function UILabelEx:setElemPosition(elem, _x, _y)
elem:ignoreAnchorPointForPosition(false)
elem:setAnchorPoint(cc.p(0,0))
if _x then
local x = _x + elem:getContentSize().width * elem:getAnchorPoint().x
elem:setPositionX(x)
end
if _y then
local y = _y + elem:getContentSize().height * elem:getAnchorPoint().y
elem:setPositionY(-y)
end
end
function UILabelEx:nextLine()
-- 调整当前行元素高度,适应maxHeight
for k, v in pairs(self._currentLine) do
self:setElemPosition(v, nil, self._renderPos.y + self._renderPos.maxHeight)
end
self._renderPos.x = 0
self._renderPos.y = self._renderPos.y + self._renderPos.maxHeight + self._lineHeight / 2
self._renderPos.maxHeight = self._defaultFontSize
self._currentLine = {}
end
function UILabelEx:scheduleShow(dt)
if self._showSeq < #self._contents then
self._showSeq = self._showSeq + 1
self._contents[self._showSeq]:setVisible(true)
end
end
return UILabelEx
还没完成就是了。。。
2022年8月16日 21:39
This board operates under the direction of the Mizorami government, and it also oversees and manages the educational institutions to which it is associated. The Mizoram 11th Important Question Paper 2023 for the class 11th examinations will be made available via their official website. The Mizoram 11th Model Question Paper was released by this board ahead of time, and the exams for the 11th grade began on February 25 and finished on March 11. Mizoram 11th Question Paper 2023 The Mizoram 11th Important Question Paper 2023 of this examination, which will be shortly announced by this board through its official website, is now being awaited by all students who took the tests.
2022年9月03日 18:20
Haryana Board Model Paper 2023 Class 6 Pdf Download with Answers for English Medium, Hindi Medium, Urdu Medium & Students for Small Answers, Long Answer, Very Long Answer Questions, and Essay Type Questions to Term1 & Term2 Exams at official website. HBSE Question Paper Class 6 New Exam Scheme or Question Pattern for Sammittive Assignment Exams (SA1 & SA2): Very Long Answer (VLA), Long Answer (LA), Small Answer (SA), Very Small Answer (VSA), Single Answer, Multiple Choice and etc.
2022年9月17日 01:04
GK stands for General knowledge which was introduced as one of the subjects. It is beginning from the foundation education to help the students by getting minimum knowledge. GK also play a key role in competitive examinations, NCERT GK Sample Paper Class 2 that’s the way NCERT included General knowledge is a subject that everyone should know and learn from Primary Education.Downloading NCERT GK Sample Paper 2023 Class 2 utilizes candidates who have to know the new examination pattern and want to get high scores smoothly for all formats of exams conducted in Term-1, Term-2 such as SA-1, SA-2, FA-1, FA-2, FA-3, FA-4, Assignments and other types of exams to Hindi Medium, English medium and Urdu Medium students.
2023年1月12日 13:38
I'm glad I found this source code. The source code that was shared real estate Great Barrington here was helpful, even though it was not complete. It helped me understand how the code works and how to fix it. Thank you for sharing it!
2025年3月26日 02:26
This is a really good site post, I’m delighted I came across it. I’ll be back down the track to check out other posts that 바카라사이트추천