zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    4-结对开发地铁
    第五周学习进度博客
    mybatis的使用
    从写json作业谈起
    工作中慢慢明白的道理
    从参与公司开发到离职
    这也是风云变幻的年代
    学习的习惯和方法跟得上时代要求
    公司中springcloud项目遇到的问题
    实习生在公司的成长
  • 原文地址:https://www.cnblogs.com/lan0725/p/4185168.html
Copyright © 2011-2022 走看看