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


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

    我们打开安装路劲:quick-3.3rc1docsapi下面的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","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"))
    
    	local sequenceAction = transition.sequence({
    		cc.MoveTo:create(1, cc.p(display.cx,display.cy)),
    		cc.RotateBy:create(2,360),
    		cc.JumpTo:create(1,cc.p(display.cx+100,display.cy),50,2),
    		cc.MoveTo:create(1, cc.p(display.width-20,display.cy))
    		})
    
    	transition.execute(sprite,sequenceAction,{
    		delay = 0.23,
    		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, action, args)
    end
    

      

    看到了,他最后调用了transition.execute函数,直接帮你执行了这个创建的动作,而不是让你创建好了,再调用transition.execute函数执行。



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

    	local sequenceAction = cc.Spawn:create({
    		cc.RotateBy:create(3,360),
    		cc.JumpTo:create(3,cc.p(display.width-20,display.cy),50,5),
    		})
    
    	transition.execute(sprite,sequenceAction,{
    		delay = 0.23,
    		onComplete = function()
    			print("跑动结束")	
    			sprite:stopAllActions()
    			sprite:setSpriteFrame(display.newSpriteFrame("lqfRightStop.png"))
    		end})
    

      

    看效果图

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

  • 相关阅读:
    DinnerNow中的Work Flow应用(上) 订单流程
    在Silverlight 2 (Beta2) 中使用webclient上传图片
    初尝dinnernow
    在silverlight 2 (beta1) 中使用BackgroundWorker
    徒劳的尝试 动态修改LINQ TO SQL的表名称
    你是否积极主动(Proactivity)?
    动态加载Silverlight应用的dll文件(可实现插件功能)
    silverlight与javascript交互操作
    DinnerNow中的Work Flow应用(下) 订单流程
    C#中winform窗体常用设置
  • 原文地址:https://www.cnblogs.com/luagame/p/4214324.html
Copyright © 2020-2023  润新知