小小菜之Cocos2dx游戏开发旅程——Lua动画队列播放

来源:互联网 发布:萧然网络问政 编辑:程序博客网 时间:2024/05/16 06:54

首先需要声明一个全局的table——gFlashTable = {}
还需要声明一个全局的标记——gFlashIsPlay = false 用于判断当前是否有动画正在播放。
在需要播放动画的地方,将创建的动画加入到teble中,如:

local animation = ccs.Armature:create("xxx")table.insert(gFlashTable , animation)

我们再来看如何进行队列播放
首先需要判断gFlashTable长度是否为0 , 其次再判断当前是否有动画正在播。有了这个思路,就很好实现了。

function xx:playFlashWithSequence()if #gFlashTable ~= 0 then        if gFlashIsPlay then            return        else        local function animationEvent(armatureBack,movementType,movementID)                if movementType == ccs. MovementEventType.complete then                    table.remove(gFlashTable , 1)                    gFlashIsPlay = false                    self:playFlashWithSequence()                end            end            gFlashTable[1]:getAnimation():playWithIndex(0)      gFlashTable[1]:getAnimation():setMovementEventCallFunc(animationEvent)                      gFlashIsPlay = true        end    endend

我们永远就只播table中的第一个动画,播放完就移除掉,并将标记设为false。
通过animationEvent这个回调函数来执行播放完后的操作,递归调用这个函数。
我们在向table中增加内容时就可调用这个函数,为了避免重复调用,我们可以做一个判断

if gFlashIsPlay then    xx:playFlashWithSequence()end

这样第一个动画创建完成的时候就会立即播放,然而在该动画没播放完之后增加的会在它播放完之后进行播放。这样就不会造成屏幕上同时出现多个动画叠加的情况了。
有便于在debug模式下进行效果的调试。

1 0
原创粉丝点击