lua滾動文字效果


基本的思想都是創建一個clippingNode,將要截取的節點添加到clippingNode中,節點加上action即可。

下面是左右滾動的代碼,如果是上下滾動,更簡單了,只需修改Y坐標即可,都不用動態去計算時間。

-- 獲取寬字符的寬度
function wideWordWidth(fontName, fontSize)
local key = generateKey(fontName, fontSize)
if mWideWordWidth[key] == nil then
local str ="ABCDEFGHIGKLMNopqrstuvwxyz1234567890"
mWideWordWidth[key]
= cc.LabelTTF:create(str, fontName, fontSize):getContentSize().width / (string.len(str) / 3)
end
return mWideWordWidth[key]
end

-- 生成key
function generateKey(fontName, fontSize)
return string.format("%s%d", fontName, fontSize)
end

-- 1 創建剪裁區
self.m_pClipRect = cc.rect(0, display.cy, display.width * 0.2, display.height * 0.2)
self.m_pClipNode
= display.newClippingRegionNode(self.m_pClipRect):addTo(self)

-- 2 創建文本區域
self.msgContent = cc.ui.UILabel.new({
text
= "你好 我是滾動文本",
font
= FONT_NAME,
size
= ZySize.SCALE(26),
color
= cc.c3b(255, 255, 255),
dimensions
= cc.size(w, h),
align
= ui.TEXT_ALIGN_CENTER, -- 文字內部居中對齊
valign = ui.TEXT_VALIGN_CENTER -- 文字內部居中對齊
})
:align(display.CENTER_LEFT, self.m_pClipRect.width
+ self.m_pClipRect.x, self.m_pClipRect.y + display.height * 0.2 * 0.5)
:addTo(self.m_pClipNode)

-- 3 滾動文字的長度
local textW = math.round( self.msgContent:getContentSize().width)

-- 4 移動距離
local nDistance = math.round( self.m_pClipRect.width) + textW

-- 5 移動所需時間
local speed = 2 --一秒移動多少個文字的距離
local nTime = math.floor(nDistance/wideWordWidth(FONT_NAME, ZySize.SCALE(26))/speed)

-- 6 動作
local tarfinsh = function()
if self.msgContent ~= nil then
self.msgContent:removeSelf()
self.msgContent
= nil
end
end

local pAction = cc.MoveBy:create(nTime, cc.p(-self.m_pClipRect.width, 0))
local pCallback = cc.CallFunc:create(tarfinsh)
local rep = cc.Sequence:create(pAction, pCallback)
self.msgContent:runAction(rep)

上下滾動動作部分代碼

local pActionShow = cc.MoveTo:create(0.5, cc.p(display.cx, self.m_pClipRect.y + self.m_pClipRect.height * 0.5))
local pActionStay = cc.DelayTime:create(2)
local pActionDisappear = cc.MoveTo:create(0.5, cc.p(display.cx, self.m_pClipRect.y + self.m_pClipRect.height + self.m_pClipRect.height * 0.5 ))
local pCallback = cc.CallFunc:create(tarfinsh)
local rep = cc.Sequence:create(pActionShow, pActionStay, pActionDisappear, pCallback)
self.msgContent:runAction(rep)

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: