博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Quick-cocos2d-x3.3 Study (十)--------- 添加动画
阅读量:6575 次
发布时间:2019-06-24

本文共 2943 字,大约阅读时间需要 9 分钟。

 

注意:在添加动画的时候必须先将图片添加到缓存中去

1 -- 将资源添加到精灵帧缓存2 display.addSpriteFrames("image/animations/binggu.plist", "image/animations/binggu.png")

 

添加动画

 

这里我们通过帧动画实现游戏角色的运动,帧动画的原理是将连续的帧图像(如下图)在渲染的时候通过逐帧或插值的方式播放出来而形成的动态效果。就像翻动小人书一样。

引擎中,帧动画的具体内容是依靠精灵显示出来的,为了显示动态图片,我们需要不停切换精灵显示的内容,通过把静态的精灵变为动画播放器从而实现动画效果。帧动画由帧组成,每一帧都是一个纹理,我们可以使用一个纹理序列来创建动画。

Quick 框架中,我们可以这样来播放一个动画:

1 -- 创建一个包含flying1.png到flying4.png的4个图像帧对象的数组2 local frames = display.newFrames( "flying.png", 1, 4 )3 4 -- 以包含图像帧的数组创建一个动画 Animation 对象5 local animation = display.newAnimation( frames, 0.3 / 4 )6 7 -- 在显示对象上循环播放动画,并返回 Action 动画动作对象8 tranisition.playAnimationForever( self, animation )

因为我们的游戏对象有不只一种的动画,所以在本教程中,我们可以先把这些动画都添加到动画缓存,这样在需要播放相应的动画的时候,我们就可以从缓存中直接获取动画来播放了,而不用再浪费时间重新创建动画

所以,请在 Player.lua 文件中添加如下的一段函数:

1 function Player:addAnimationCache() 2       local animations = { "flying", "drop", "die" } 3       local animationFrameNum = { 4, 3, 4 } 4   5       for i = 0, #animations do 6            -- 1 7            local frames = display.newFrames( animations[i] .. "%d.png", 1, animationFrameNum[i] ) 8            -- 2 9            local animation = display.newAnimation( frames, 0.3 / 4 )10            -- 311            display.setAnimationCache( animations[i], animation)12   13      end14  15 end

 

animations,animationFrameNum分别表示角色的三种动画和三种动画分别有的帧总数。

遍历animations时,下面一一解释下函数的作用:

  1. 创建一个包含animations[i]1.png到animations[i]animationFrameNum[i].png的图像帧对象的数组,如i = 1,就是创建一个包含flying1.png到flying4.png的图像帧对象的数组。其中..是字符串连接操作符,它可以用来连接两个字符串。当其中一个为其它类型时,它会把该类型也转为字符串。
  2. 以包含图像帧的数组创建一个动画 Animation 对象,参数 0.3 / 4 表示 0.3 秒播放完 4 桢。
  3. 将2中创建好的 animation 对象以指定的名称(animations[i])加入到动画缓存中,以便后续反复使用。也就是我们在 AnimationCache 中可以通过animations = {“flying”, “drop”, “die”}这三种动画的名称来查找制定的 animation 对象。

把动画载入缓存后,我们就可以写下对应的函数去执行动画了。如下:

1 function Player:flying() 2     transition.stopTarget( self ) 3     transition.playAnimationForever( self, display.getAnimationCache( "flying" ) ) 4  5 end 6  7 function Player:drop() 8     transition.stopTarget( self ) 9     transition.playAnimationForever( self, display.getAnimationCache( "drop" ) )10 end    11 12 function Player:die()13     transition.stopTarget( self )14     transition.playAnimationForever( self, display.getAnimationCache( "die" ) )15 end

最后在创建 Player 对象后,我们就可以调用以上相应的方法来播放指定的动画了

 

 

实例:

 

1 function GameScene:ctor() 2     -- 将资源添加到精灵帧缓存 3     display.addSpriteFrames("image/animations/binggu.plist", "image/animations/binggu.png") 4  5     self.player = display.newSprite( "#binggu_01.png" ) 6         :align( display.CENTER, display.cx / 4, display.cy ) 7         :addTo(self) 8  9     -- 创建一个包含flying1.png到flying4.png的4个图像帧对象的数组10     local frames = display.newFrames( "binggu_0%d.png", 1, 7 )11 12     -- 以包含图像帧的数组创建一个动画 Animation 对象13     local animation = display.newAnimation( frames, 0.3 / 4 )14 15     -- 在显示对象上循环播放动画,并返回 Action 动画动作对象16     transition.playAnimationForever( self.player, animation )17 18 end

 

 

 

 

转载于:https://www.cnblogs.com/dudu580231/p/4821173.html

你可能感兴趣的文章
root用户重置其他密码
查看>>
C#------如何获取本机IP地址
查看>>
关于查询扩展版ESI高被引论文的说明
查看>>
【iCore3应用】基于iCore3双核心板的编码器应用实例
查看>>
Oracle推断值为非数字
查看>>
得知发行组长老潘今天岗位上最后一天就要离开有感
查看>>
[转]WF事件驱动(1)
查看>>
异常关闭MyEclipse 8.6后,不能重启
查看>>
多年前写的一个ASP.NET网站管理系统,到现在有些公司在用
查看>>
vue-cli中理不清的assetsSubDirectory 和 assetsPublicPath
查看>>
爆款 | Medium上6900个赞的AI学习路线图,让你快速上手机器学习
查看>>
Java基础知识梳理(五)从源码了解字符串
查看>>
从JDK源码角度看Short
查看>>
HTTP/2特性及其在实际应用中的表现
查看>>
解密Angular WebWorker Renderer (二)
查看>>
parceljs 中文文档24小时诞生记
查看>>
五年 Web 开发者 star 的 github 整理说明
查看>>
Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo
查看>>
Android一种常见的布局困扰
查看>>
ReactNative字体大小不随系统字体大小变化而变化
查看>>