Quick cocos2dx-Lua(V3.3R1)学习笔记(6)---- 让精灵执行不同的动作

Quick cocos2dx-Lua(V3.3R1)学习笔记(6)---- 让精灵执行不同的动作,第1张

概述上一篇我们实现了精灵动画,但是人物动起来了,位置还在中央,这怎么能行呢,除非他在玩太空步,一步两步一步两步 一步一步似爪牙似魔鬼的步伐......摩擦摩擦在这光滑的地上摩擦摩擦 我们打开安装路劲:\quick-3.3rc1\docs\api下面的transition.html,这次我们就用文档介绍的函数让进精灵执行动作 下面我们就让精灵从做走到右边 我们看transition.exectue(ta

上一篇我们实现了精灵动画,但是人物动起来了,位置还在中央,这怎么能行呢,除非他在玩太空步,一步两步一步两步 一步一步似爪牙似魔鬼的步伐......摩擦摩擦在这光滑的地上摩擦摩擦


我们打开安装路劲:\quick-3.3rc1\docs\API下面的Transition.HTML,这次我们就用文档介绍的函数让进精灵执行动作


下面我们就让精灵从做走到右边

我们看Transition.exectue(target,action,args)这个函数,中间就是我们创建的动作


function MainScene:ctor()	display.addSpriteFrames("lqfRoleWalk.pList","lqfRoleWalk.png")	local sprite = display.newSprite("#lqfRightStop.png")	sprite:align(display.CENTER,20,display.cy)	sprite:addTo(self)	sprite:setScale(2)		local frames = display.newFrames("lqfRightWalk%d.png",1,2)	local animation = display.newAnimation(frames,0.5/2)	display.setAnimationCache("lqfRightWalk",animation)	sprite:playAnimationForever(display.getAnimationCache("lqfRightWalk"))	Transition.execute(sprite,cc.Moveto:create(3,cc.p(display.wIDth-20,display.cy)),{		delay = 0.23,onComplete = function()			print("跑动结束")				sprite:stopAllActions()			sprite:setSpriteFrame(display.newSpriteFrame("lqfRightStop.png"))		end})end

上面就是我们上一篇的代码,我们将精力初始化在(20,display.cy)坐标哪里,看Transition.execute中间一个参数,这个cocos2dx lua的原生函数,就是在3s内移动到(display.wIDth-20,display.cy)这个位置上,最后一个参数是一个table,里面有各种参数,delay是延迟多久执行当前动作,关键在于这个onComplete这个成员,这个成员存放了一个函数,用来处理动作执行后的处理收尾工作,比如清理执行完动作的精灵的内存

当然,我没有清理精灵,只是结束动作后,让精灵停止跑动,并且将精灵的帧改变为停止状态

下面看代码运行效果





如果我想执行多个动作呢,改怎么写呢

我想执行完动作后,在执行其他动作

这就要用到Transition.sequence()函数了,直接贴代码,后面讲解

function MainScene:ctor()	display.addSpriteFrames("lqfRoleWalk.pList",animation)	sprite:playAnimationForever(display.getAnimationCache("lqfRightWalk"))	local sequenceAction = Transition.sequence({		cc.Moveto:create(1,cc.p(display.cx,cc.RotateBy:create(2,360),cc.JumpTo:create(1,cc.p(display.cx+100,display.cy),50,2),cc.Moveto:create(1,display.cy))		})	Transition.execute(sprite,sequenceAction,onComplete = function()			print("跑动结束")				sprite:stopAllActions()			sprite:setSpriteFrame(display.newSpriteFrame("lqfRightStop.png"))		end})end
我们用Transition.sequence创建一系列的动作,然后交给Transition.execute执行,你会问,为什么有时候用cc原生函数,有时用Transition系列函数,比如moveto,cc原生有一个,Transition里面也有一个,这让人好糊涂,我们直接进Transition.lua看源码
function Transition.moveto(target,args)    assert(not tolua.isnull(target),"Transition.moveto() - target is not cc.Node")    local tx,ty = target:getposition()    local x = args.x or tx    local y = args.y or ty    local action = cc.Moveto:create(args.time,cc.p(x,y))    return Transition.execute(target,args)end
看到了,他最后调用了Transition.execute函数,直接帮你执行了这个创建的动作,而不是让你创建好了,再调用Transition.execute函数执行。



顺序执行动作完成了,但是我们有时候也想要,同时进行的动作,游戏里面人物跳跃,翻转,这个可不是sequence可以完成的了,也有办法,只不过Transition没给我们封装出来,我们直接调用原生cocos2dx lua代码就行了,创建动作,再用Transition.execute执行就行了


	local sequenceAction = cc.Spawn:create({		cc.RotateBy:create(3,cc.JumpTo:create(3,5),})	Transition.execute(sprite,onComplete = function()			print("跑动结束")				sprite:stopAllActions()			sprite:setSpriteFrame(display.newSpriteFrame("lqfRightStop.png"))		end})
看效果图


好,动作基本完成。累死鸟了

总结

以上是内存溢出为你收集整理的Quick cocos2dx-Lua(V3.3R1)学习笔记(6)---- 让精灵执行不同的动作全部内容,希望文章能够帮你解决Quick cocos2dx-Lua(V3.3R1)学习笔记(6)---- 让精灵执行不同的动作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1023721.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存