cocos2dx-lua实现弹幕

弹幕视频在近几年逐渐火爆。游戏里添加弹幕也是一种可以尝试的想法。下面是一种简单的实现。

弹幕一般需要有几个参数:

  1. 弹幕在屏幕上的高度
  2. 弹幕颜色
  3. 弹幕内容
  4. 弹幕移动速度
  5. 弹幕字体

首先,将弹幕组件化,在使用的时候通过直接添加即可。

----------------------
--文件名:textBarrage.lua
--  说明:文本弹幕组件
--        适用于横屏,竖屏修改特定值即可
--        可以扩展,支持富文本
--创建者:dongforever
--  日期:2016/3/19
----------------------
local textBarrage = class("textBarrage", function(args)
    return cc.Node:create()
end)

local color = {
    [1] = cc.c3b(255, 0, 5),
    [2] = cc.c3b(0, 255, 0),
    [3] = cc.c3b(0, 0, 255),
    [4] = cc.c3b(255, 255, 255),
}

function textBarrage:ctor(args)

    self.parent = args.parent 
    self.text_content = args.content --存储文本内容
    self.text_size = args.size or 64 --文本尺寸
    self.duration = args.duration or 3 --文本移动持续的时间 
    self.duration_static = 3  --静止弹幕的持续时间

    self.height = math.random(1, 5) * 100 --文本显示的高度,随机值
    self.init_width = math.random(1, 5) * 20 + 50 --文本初始时的位置

    self.barrage_text = nil 

    self.parent:addChild(self)
    self.width = self.parent:getContentSize().width
    self:setPosition(self.width + self.init_width,self.height)

    self:init()
    self:textMove()
end

function textBarrage:init()
    self.barrage_text = cc.ui.UILabel.new({
            UILabelType = 2, 
            text = self.text_content, 
            size = self.text_size,
            color = color[math.random(1,4)],
        })
        :align(display.CENTER, 0, 0)
        :addTo(self)
end

function textBarrage:textMove()
    --弹幕移动总的距离
    local distance = self.width + self.barrage_text:getContentSize().width + self.init_width
    if self.duration ~= 0 then
        self:runAction(cc.Sequence:create(
            cc.MoveBy:create(self.duration, cc.p(-distance, 0)),
            cc.CallFunc:create(function()
                --自动销毁
                --print("remove")
                self.parent:removeChild(self)
                end)
            ))
    else
        --静止弹幕 
        self:setPosition(self.width/2,self.height)
        --静止弹幕的层级应该高于其他
        self:setLocalZOrder(999)
        self:runAction(cc.Sequence:create(
            cc.DelayTime:create(self.duration_static),
            cc.CallFunc:create(function()
                --自动销毁
                --print("remove")
                self.parent:removeChild(self)
            end)
        ))
    end 
end


return textBarrage

在需要弹幕时,添加一个定时器,每个一段时间(2秒)添加一次弹幕。

你可能感兴趣的:(cocos2dx-lua)