下面我们通过一个实例介绍一下帧动画的使用,这个实例如下图所示,点击Go按钮开始播放动画,这时候播放按钮标题变为Stop,点击Stop按钮可以停止播放动画。
帧动画实例
下面我们再看看具体的程序代码,首先看一下看GameScene.lua文件,它的代码如下:
- local isPlaying = false -- 播放标识 ①
- local size =cc.Director:getInstance():getWinSize()
- … …
- -- create layer
- function GameScene:createLayer()
- local layer = cc.Layer:create()
- local spriteFrame = cc.SpriteFrameCache:getInstance()
- spriteFrame:addSpriteFramesWithFile("run.plist")
- local bg =cc.Sprite:createWithSpriteFrameName("background.png")
- bg:setPosition(cc.p(size.width/2, size.height/2))
- layer:addChild(bg)
- local sprite = cc.Sprite:createWithSpriteFrameName("h1.png")
- sprite:setPosition(cc.p(size.width/2, size.height/2))
- layer:addChild(sprite)
- --toggle菜单
- local goSprite = cc.Sprite:createWithSpriteFrameName("go.png")
- local stopSprite = cc.Sprite:createWithSpriteFrameName("stop.png")
- local goToggleMenuItem = cc.MenuItemSprite:create(goSprite, goSprite)
- local stopToggleMenuItem = cc.MenuItemSprite:create(stopSprite,stopSprite)
- local toggleMenuItem = cc.MenuItemToggle:create(goToggleMenuItem,
- stopToggleMenuItem)
- toggleMenuItem:setPosition(cc.Director:getInstance():convertToGL(cc.p(930,540)))
- local mn = cc.Menu:create(toggleMenuItem)
- mn:setPosition(cc.p(0, 0))
- layer:addChild(mn)
- local function OnAction(menuItemSender)
- if not isPlaying then
- --///////////////动画开始//////////////////////
- local animation =cc.Animation:create() ②
- for i=1,4 do
- local frameName =string.format("h%d.png",i) ③
- cclog("frameName =%s",frameName)
- local spriteFrame = spriteFrame:getSpriteFrameByName(frameName) ④
- animation:addSpriteFrame(spriteFrame) ⑤
- end
- animation:setDelayPerUnit(0.15) --设置两个帧播放时间 ⑥
- animation:setRestoreOriginalFrame(true) --动画执行后还原初始状态 ⑦
- local action =cc.Animate:create(animation) ⑧
- sprite:runAction(cc.RepeatForever:create(action)) ⑨
- --//////////////////动画结束///////////////////
- isPlaying = true
- else
- sprite:stopAllActions() ⑩
- isPlaying = false
- end
- end
- toggleMenuItem:registerScriptTapHandler(OnAction)
- return layer
- end
- return GameScene
上述代码第①行是声明一个布尔变量isPlaying,用来保存播放状态,true时候说明正在播放,false时候说明停止播放。
第②行代码是创建一个Animation对象,它是动画对象,然后我们要通过循环将各个帧图片放到Animation对象中。第③行是获得帧图片的文件名,string.format("h%d.png",i)是对字符串进行格式化。第④行代码是通过帧名创建精灵帧对象,第⑤行代码把精灵帧对象添加到Animation对象中。
第⑥行代码是animation:setDelayPerUnit(0.15)是设置两个帧播放时间,我们这个动画播放是4帧。第⑦行代码animation:setRestoreOriginalFrame(true)是动画执行完成是否还原到初始状态。第⑧行代码是通过一个Animation对象创建Animate对象,第⑨行代码cc.Animate:create(animation)是执行动画动作,无限循环方式。
第⑩行代码sprite:stopAllActions()停止所有的动作。
更多内容请关注最新Cocos图书《Cocos2d-x实战:Lua卷——Cocos2d-lua开发》
本书交流讨论网站:http://www.cocoagame.net
欢迎加入Cocos2d-x技术讨论群:257760386
更多精彩视频课程请关注智捷课堂Cocos课程:http://v.51work6.com
智捷课堂现推出Cocos会员,敬请关注:http://v.51work6.com/courseInfoRedirect.do?action=netDetialInfo&courseId=844465&categoryId=0
《Cocos2d-x实战 Lua卷》现已上线,各大商店均已开售:
京东:http://item.jd.com/11659697.html
欢迎关注智捷iOS课堂微信公共平台,了解最新技术文章、图书、教程信息
相关推荐
这本书的源码提供了丰富的实例和练习,帮助读者更好地理解和掌握Cocos2d-x与Lua的结合使用。 源码是学习编程的重要资源,特别是对于游戏开发来说,通过实际代码可以深入理解引擎的工作原理和Lua在游戏逻辑中的应用...
这本书的《Cocos2d-x实战Lua卷.pdf》将通过丰富的实例和详细解释,帮助读者掌握使用lua进行Cocos2d-x游戏开发的技能,无论是初学者还是有经验的开发者,都能从中获得宝贵的知识和实践经验。对于想要提升游戏开发能力...
DrawNode是Cocos2d-x中的一个类,允许开发者在屏幕上绘制2D图形,如线条、矩形、椭圆等。为了显示二维码,我们需要以下步骤: 1. 创建一个DrawNode实例,作为二维码的画布。 2. 使用libqrencode的API将数据编码为...
6. **音频和音乐**:介绍如何在Cocos2d-x中播放背景音乐和音效,以及音乐的控制和管理。 7. **网络与存储**:讨论如何进行网络通信,如下载更新、保存和读取游戏数据。 8. **性能优化**:提供关于代码优化、内存...
通过分析和学习这些源码,开发者可以深入理解cocos2d-x的底层机制,包括场景管理、精灵(Sprite)绘制、粒子系统、物理引擎、动画帧序列、声音播放、用户输入处理等核心功能。同时,还可以了解到游戏状态管理、碰撞...
在Cocos2d-x中集成Lua,不仅可以提高开发效率,还能降低内存占用,这对于移动设备上的游戏尤为重要。《Cocos2d-x实战:Lua卷》这本书主要介绍了如何利用Lua进行游戏开发,并且涵盖了从基础到高级的各种主题,对于...
在iOS平台上开发游戏时,有时候会使用到Cocos2d-x框架,而为了实现更高效、更便捷的编程,开发者可能会选择使用Lua作为脚本语言。"cocos2d-lua整合到ios工程.zip"这个压缩包文件提供了一个将Cocos2d-lua集成到原生...
在Cocos2d-x中使用Spine动画,你需要做以下几步: 1. **导入Spine库**:首先,你需要在Cocos2d-x项目中添加Spine的C++ SDK。这通常涉及下载SDK,将其解压并将其头文件和库文件链接到你的项目中。 2. **加载Spine...
在Cocos2d-x中使用Lua,可以显著提升开发效率,降低项目维护难度。 在Cocos2d-x中,Lua与C++的交互主要依赖于tolua++这个工具,它能够将Lua脚本编译为C++可调用的函数,使得开发者可以在Lua中编写游戏逻辑,而在C++...
这个“Cocos2d-X游戏源码大合集.rar”文件显然包含了大约三十个使用Cocos2d-X开发的游戏实例源代码,对于学习和理解Cocos2d-X游戏开发的原理、技巧以及实践应用具有极大的价值。 1. **Cocos2d-X基础**: Cocos2d-X...
2. **精灵与动画**:Sprite是cocos2d-x中表示游戏对象的基本元素,可以承载图片资源。在魔塔中,角色、怪物等都可以通过精灵来表示。动画可以通过连续的精灵帧实现,例如角色行走、攻击等动作。 3. **物理引擎碰撞...
【cocos2d-x游戏实例-纵版射击游戏】是一个基于Cocos2d-x框架开发的垂直滚动射击游戏,这种类型的游戏通常被称为“飞行射击”或“弹幕射击”。Cocos2d-x是一个广泛使用的开源游戏开发框架,它支持多平台开发,包括...
在游戏开发领域,cocos2d-x是一个广泛使用的开源跨平台2D游戏引擎,它允许开发者使用C++、Lua或JavaScript进行游戏编程,并能在iOS、Android、Windows等多个平台上运行。本实例“愤怒的松鼠”是基于cocos2d-x框架...
1. **cocos2d-Lua引擎**:cocos2d-Lua是cocos2d-x框架的一个分支,它将强大的cocos2d-x图形库与易于学习和使用的Lua脚本语言相结合,使得开发者能够快速构建2D游戏。在本项目中,所有的游戏逻辑、场景管理、对象交互...
通过学习和实践这个光盘中的内容,开发者可以掌握cocos2d-x 3.x的核心概念,如场景管理、精灵动画、粒子系统、触摸事件处理、游戏逻辑设计等,从而能够独立地开发出高质量的2D游戏。对于希望提升游戏开发技能或转行...
2. **渲染引擎**:Cocos2d-x使用基于OpenGL的渲染系统,能高效处理2D图形,提供动画、粒子效果、物理引擎等游戏必备功能。 3. **资源管理**:它包含了对图片、音频、字体等资源的管理工具,简化了资源加载和释放的...
此外,还会介绍如何在Cocos2d-x中集成Lua脚本,使用Lua绑定C++代码,实现游戏逻辑。通过学习这部分内容,开发者可以灵活地使用Lua进行游戏逻辑设计和优化。 在游戏开发过程中,UI设计和事件处理是关键部分。书中的...
2. **Lua语言基础**:Lua具有简洁的语法和强大的元编程能力,是Cocos2d-x中常用的脚本语言。学习配套代码时,需要理解Lua的基本数据类型(如数字、字符串、表、布尔值和函数)、控制结构(if-else、for、while等)、...
《cocos2d-x3.0中自定义类与Lua交互的深度解析》 在cocos2d-x 3.0版本中,开发者们经常需要将C++自定义的类暴露给Lua脚本使用,以便在游戏中实现更复杂的逻辑和交互。这篇文档将详细解释如何将C++自定义类导出到Lua...
Cocos2d-x框架中使用C++进行编程可以利用C++的高级特性和性能优势,从而编写出更加高效、灵活的游戏代码。 3. 关东升 关东升是一位资深的软件开发者、技术作家。他出版的《Cocos2d-x实战C++卷》一书是专门为游戏...