cocos2d-x CCAnimate 动画播放时间帧问题

来源:未知 责任编辑:责任编辑 发表时间:2013-11-26 22:13 点击:
本文要解决的疑问: p> 

p>  帧缓冲池是什么?

p> 

p>  动画缓冲池是什么?

p> 

p>  动画帧如何按照时间帧片播放?

p> 

p>  如果相邻动画帧的时间间隔不相同cocos2d-x如何来处理?

p> 

p>  至于其他的如何用plist文件初始化动画缓冲池很简单,但是你得自己研究源代码

p> 

p>  先来解决第一个问题。CCSpriteFrameCache。里面用一个CCDictionary (m_pSpriteFrames)存放了很多的CCSpriteFrame对象。他的key就是plist里面读取出来的。注意默认名字对应的是textures中包含的每张图片的名字,有可能带后缀。所以,我很不喜欢这个key,建议cocostudio以后增加修改key的功能。CCSpriteFrame是什么呢?他就是用来指定该帧对应对应纹理图中的位置信息。其实把他说成一个Cache不合适,充其量只是一种包装了的容器。不过既然人家这样命名,我觉得可能后期会扩展一些利用LRU或者别的算法清除不用的SpriteFrame。至于CCSpriteFrameCache里面的其他函数,就是用来解析plist文件的。

p> 

p>  再来解决第二个问题。CCAnimationCache。里面同样也是一个CCDictionary(m_pAnimations)存放了很多的CCAnimation(里面是CCAnimationFrame)对象。既然有了CCSpriteFrame对象,为什么还得再要一个CCAnimationFrame对象呢?如果只用CCSpriteFrame,那你的每个帧的时间片信息存放到哪里啊?为什么不把时间片信息放到CCSpriteFrame里面呢?这里cocos2d-x设计的非常好。万一你针对同一个帧需要多个不同的播放时间片,这种情况就完美解决了。注意CCAnimationFrame的初始化函数 bool initWithSpriteFrame(CCSpriteFrame* spriteFrame, float delayUnits, CCDictionary* userInfo);第二个参数delayUnits。他并不是一个时间。原文的解释how many units of time the frame takes。因为COCOS2D-X的CCActionInterval播放的原理就是把一个序列的动画分成了时间片相同的动画帧。如果相邻的动画帧时间不相同,就分配不同的delayUnits。我们把一个序列(例如游戏中某个角色的某个方向8帧或者10帧的动画称作是序列)CCAnimationFrame放到一个CCArray中,然后再去创建成一个CCAnimation,这样这个方向的序列动画帧就初始化了一个对象。这里需要再说明的就是CCAnimation的CCAnimation* create(CCArray *arrayOfAnimationFrameNames, float delayPerUnit, unsigned int loops); 这个函数的delayPerUnit,这个值就是时间片的概念。他就一个以秒为单位的一个时间。同样称为CCAnimationCache也为时过早了点。不过相信官方后期还会在里面加入伸缩信息。

p> 

p>   再来解决第三个问题。直接从CCActionInterval::step(float dt)这里说起。dt参数就是上一次调用这个函数和本次调用该函数的时间差。单位是秒。CCActionInterval播放序列动画就是以时间片为单位来进行播放的。这里的时间片就是创建CCAnimation的时候放进去的那个值。读者明白了这些恐怕也就明白了为什么在该函数里面有this->update(MAX(0,MIN(1,m_elapsed/MAX(m_fDuration,FLT_EPSILON))) 去让CCAnimate执行update操作了。

p> 

p>   至于最后一个问题 只要给每个CCAnimationFrame分配不同的时间片的数量,那也就完成了不同帧不同时间的播放要求了。

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • cocos2d-x学习笔记(19)--label 、label atlas
    • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
    • Cocos2d-x学习(一):HelloWorld
    • cocos2dx在xcode下开发,编译到android上(2)
    • cocos2d 设置屏幕默认方向
    • Cocos2d-x 2.0 之 Actions “三板斧” 之一
    • cocos2d-x学习笔记(22)--地图的使用2(TMX) --Z-Order、AnchorPoi
    • cocos2d-x学习笔记(18)--游戏打包(windows平台)
    • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1