cocos lua动画,简单好用的封装

先贴代码:

 1     local Node = cc.Node
 2     function Node:run(actions)
 3         local function packAction(_actions)
 4             if type(_actions)~="table" then return _actions end
 5             for k,act in pairs(_actions) do
 6                 if k=="loop" then
 7                     local loopAct = cc.RepeatForever:create(packAction(act)):retain()
 8                     table.insert(
 9                         _actions,
10                         cc.CallFunc:create(function( )
11                             self:runAction(loopAct)
12                         end)
13                     )
14                     _actions.loop = nil
15                 elseif type(act)=="table" then
16                     _actions[k] = cc.Spawn:create(unpack(act))
17                 end
18             end
19             return cc.Sequence:create(_actions)
20         end
21         self:runAction(packAction(actions))
22         return self
23     end

之后这样使用:

 1 display.newSprite("foo.png"):addTo(self):run{
 2     cc.MoveTo:create(0.1,cc.p(200,200)),--step 1
 3     cc.MoveTo:create(0.2,cc.p(400,300)),--step 2
 4     {
 5         cc.MoveTo:create(0.1,cc.p(500,500)),
 6         cc.ScaleTo:create(0.1,0.5),
 7     },--step 3
 8     cc.ScaleTo:create(0.2,1),--step 4
 9     cc.MoveTo:create(0.2,cc.p(400,300)),--step 5
10     loop = {
11         cc.RotateBy:create(0.1,30),
12         cc.ScaleTo:create(0.15,0.95),
13         cc.ScaleTo:create(0.15,1.05),
14     }--可选内容,最后循环,endless...
15 }

 

说明一下:

  1.Node.run接收一个table,按顺序依次播放。

  2.如果table中有一个2级table,则2级table中的动画同时播放。

  3.如果想要循环播放一组动画,在table中给一个key为“loop”的键值对。loop的内容总是最后播放。

posted on 2017-04-24 11:02  飞天里欧斯  阅读(617)  评论(0编辑  收藏  举报

导航