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

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

我们打开安装路劲:\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","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})

  

看效果图

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

时间: 2024-11-10 07:41:20

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

Lua学习笔记(七):迭代器与泛型for

1.迭代器与闭包 迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素.在Lua中我们常常使用函数来描述迭代器,每次调用该函数就返回集合的下一个元素. 迭代器需要保留上一次成功调用的状态和下一次成功调用的状态,也就是他知道来自于哪里和将要前往哪里.闭包提供的机制可以很容易实现这个任务.记住:闭包是一个内部函数,它可以访问一个或者多个外部函数的外部局部变量.每次闭包的成功调用后这些外部局部变量都保存他们的值(状态).当然如果要创建一个闭包必须要创建其外部局部变量.所以一个典型的闭包的结构包含

Cocos2d-x 3.1.1 学习笔记(二)创建自定义项目

一.通过命令创建项目 前面搭建好环境后,怎样创建自己的cocos2d-x项目呢? 先来看看cocos2dx 3.1的目录吧 这就是 cocos2dx 3.1的目录, 3.1版本的创建跟以前的不同了(好吧,又变了),我们先把 download-deps.py 和 setup.py 执行一遍,按住shift+鼠标右键 输入cocos命令 回车 这里会看到一些命令的声明,这里我只说下 创建新的项目,输入命令cocos new 这里 -p      是包名 -l       是文件格式 有cpp.lua

Cocos2dx 3.1.1 学习笔记整理(1)

最近手痒了,不小心下载了cocos2dx 3.1.1,又搞了个VS2012,于是头脑发热的搞起 3.1.1了. 我是有多么的不专心啊. 已经把自己之前的学习内容从2.2.3迁移到了3.1.1,除了骨骼动画相关的之外. 简单记录一下过程: 1 安装与搭建 解压cocos2dx3.1.1版本,根目录下会有download-deps.py和setup.py, 预先用python分别对这两个文件跑一遍,有问题的话解决问题,没问题的话最好了. 2新建项目 跑完以上两个py文件之后,会自己将所有相关的系统环

基于Cocos2dx+Lua v3.x的RichLabel

RichLabel 简介 RichLabel基于Cocos2dx+Lua v3.x解析字符串方面使用了labelparser,它可以将一定格式的字符串,转换为lua中的表结构扩展标签极其简单,只需添加一个遵守规则的标签插件即可,无需改动已存在代码!!! (标签插件都在labels文件夹下) labelparser的详解labelparser在github上的源码RichLabel在github上的源码 支持图片(缩放,旋转,是否可见) 支持文本属性(字体,大小,颜色,阴影,描边,发光) 支持标签

第十七篇:博采众长--初探WDDM驱动学习笔记(七)

基于WDDM驱动的DirectX视频加速重定向框架设计与实现 现在的研究生的论文, 真正质量高的, 少之又少, 开题开得特别大, 动不动就要搞个大课题, 从绪论开始到真正自己所做的内容之间, 是东拼西凑地抄概念, 抄公式, 达到字数篇幅的要求, 而自己正真做了什么, 有哪些实际感受, 做出的内容, 相比前面的东拼西凑就几点内容, 之后就草草结束, 步入感谢的段落. 原因不光只有学生自己, 所谓的读研, 如果没有一个环境, 学生有再大的愿望, 再强的毅力, 到头来也只是空无奈. 有些导师要写书,

马哥学习笔记七——LAMP编译安装之MYSQL

1.准备数据存放的文件系统 新建一个逻辑卷,并将其挂载至特定目录即可.这里不再给出过程. 这里假设其逻辑卷的挂载目录为/mydata,而后需要创建/mydata/data目录做为mysql数据的存放目录. 2.新建用户以安全方式运行进程: # groupadd -r mysql # useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql # chown -R mysql:mysql /mydata/data 3.安装并初始化my

【Cocos2D-X 学习笔记】为精灵添加单点触控

由于Cocos2d-x处于新学的阶段,因此最近也无法进行系统地更新,只会选择一些典型的Demo贴上来,一来是与大家分享,而来也可以作为以后回顾时的参考. 今天介绍一下Cocos2d-x的触摸事件处理,了解Android开发的朋友们知道,Android里会用一个OnClickListener()进行事件监听,而在J2SE中也会有Event类实现专门的监听处理.在Cocos2d-x中,因为是游戏引擎,用户在玩游戏时总是要通过屏幕与游戏进行交互,可想而知触摸事件是主要处理的事件.这里主要讲一下如何为精

python学习笔记七:条件&循环语句

1.print/import更多信息 print打印多个表达式,使用逗号隔开 >>> print 'Age:',42 Age: 42   #注意个结果之间有一个空格符 import:从模块导入函数 import 模块 from 模块 import 函数 from 模块 import * 如果两个模块都有open函数的时候, 1)使用下面方法使用: module1.open()... module2.open()... 2)语句末尾增加as子句 >>> import ma

swift学习笔记(七)自动引用计数

与Object-c一样,swift使用自动引用计数来跟踪并管理应用使用的内存.当实例不再被使用时,及retainCount=0时,会自动释放是理所占用的内存空间. 注:引用计数仅适用于类的实例,因为struct和enumeration属于值类型,也就不牵涉引用,所以其存储和管理方式并不是引用计数. 当一个实例被初始化时,系统会自动分配一定的内存空间,用于管理属性和方法.当实例对象不再被使用时,其内存空间被收回. swift中的引用类型分为三种,即Strong强引用,weak弱引用和无主引用unw

Swift学习笔记七:闭包

闭包可以 捕获 和存储其所在上下文中任意常量和变量的引用. Swift 会为您管理在 捕获 过程中涉及到的内存操作. 在 函数 章节中介绍的全局和嵌套函数实际上也是特殊的闭包,闭包采取如下三种形式之一: 1. 全局函数是一个有名字但不会捕获任何值的闭包 2. 嵌套函数是一个有名字并可以捕获其封闭函数域内值的闭包 3. 闭包表达式是一个可以捕获其上下文中变量或常量值的没有名字的闭包 一.闭包表达式 闭包函数类似于Objective-C中的block.下面我们用事实说话: let counts =