基本的思想都是建立一個clippingNode,將要截取的節點添加到clippingNode中,節點加上action便可。app
下面是左右滾動的代碼,若是是上下滾動,更簡單了,只需修改Y座標便可,都不用動態去計算時間。ide
-- 獲取寬字符的寬度 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)
上下滾動動做部分代碼ui
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)