先贴代码:
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的内容总是最后播放。