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

本文共 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

你可能感兴趣的文章
输得太不光彩!Uber司机把算法当游戏
查看>>
亚信安全成为 “上海网络与信息安全监测预警平台” 首批发起单位
查看>>
浪潮HF系列固态存储的独门绝活儿
查看>>
“雪花”项目:Microsoft探索在.NET中实现手工内存管理
查看>>
构建基于容器的本机监控系统 应该注意什么?
查看>>
从CSE Asia 2016亚洲消费电子展看智能设备安全
查看>>
未来五年存储发展趋势猜想
查看>>
浪潮IPF2016宣布一系列举措背后的思考是什么?
查看>>
每一个程序员要遵守的一些优秀编程风格
查看>>
大数据化雨落地 BDA万唤始出来
查看>>
三头狗又来了 Windows再现毁灭级漏洞
查看>>
企业安全需警惕:流行APP均遭恶意软件克隆
查看>>
IDG评2008十大IT新闻 蓝光标准胜出入围
查看>>
阿里CEO张勇:网络安全需要全生态协作
查看>>
光纤已落伍?英国实现100Gbps空间光通信!
查看>>
Petya勒索病毒安全预警通告
查看>>
中国人工智能学会通讯——智力测试与智能测评的对比思考
查看>>
Linux 动态库相关知识总结
查看>>
Docker 基础技术:Linux Namespace(下)
查看>>
大鱼吃光小鱼,绝不可能!盘点2016存储行业发生的大事件
查看>>