Cocos动画
来源:互联网 发布:中国家具出口数据 编辑:程序博客网 时间:2024/05/22 11:00
动画基础
动画不同于动作,动作的针对单帧的,动画则是多帧组合的。
// 获得精灵帧缓存对象,并且将动画帧加载到缓存
SpriteFrameCache* cache =SpriteFrameCache::getInstance();
cache->addSpriteFramesWithFile("animations/grossini.plist");
// 从缓存中获取动画用的精灵帧,保存在frames,以备将来Animation使用
Vector<SpriteFrame*> frames; //Animation必须用精灵帧集合Vector做参数
for (int i = 1; i <= 14;++i)
{
char buf[128];
sprintf(buf, "grossini_dance_%02d.png", i); //从plist中知道的小图命名逻辑
SpriteFrame* frame = cache->getSpriteFrameByName(buf);
frames.pushBack(frame);
}
// Animation可以复用(一个Animation可以为多个Animate使用),Animate不可以(Animate理解为一个动作——Animate相当于播放器,Animation相当于光盘
Animation* animation = Animation::createWithSpriteFrames(frames,0.1f); //Animation保存了所有动画图片,以及动画时间间隔要求
Animate* animate = Animate::create(animation);
// 执行动画
Sprite* sprite = Sprite::create(); addChild(sprite);
sprite->setPosition(200,200);
//运行Animate动作
sprite->runAction(RepeatForever::create(animate));
动画缓存
既然Animation可以复用,那么一定有动画缓存:
添加
Animation* animation = Animation::createWithSpriteFrames(frames,0.1f);
AnimationCache::getInstance()->addAnimation(animation,"animation1");
也可以用另外一种方式:但是这种方式的plist有特别要求
AnimationCache::getInstance()->addAnimationsWithFile(plist文件);
缓存添加一个Animation同时也绑定一个名字
使用
Animate* animate = Animate::create(AnimationCache::getInstance()->
getAnimation("animation1"));
sprite->runAction(RepeatForever::create(animate));
从动画缓存中直接按名字取出使用
其他
Animation::setDelayPerUnit(delay);设置动画时间间隔
AnimationCache::getInstance()->removeAnimation("aa");删除某个缓存
动画缓存也是和其他缓存一块清除的AnimationCache::destroyInstance();
动画封装
void runAnimation(Sprite*sprite, const char* plist, constchar* frameFormat=nullptr, float delay = 0.0f)
{
Animation* animation =getAnimation(plist,frameFormat, delay);
Animate* animate =Animate::create(animation);
RepeatForever* rep =RepeatForever::create(animate);
sprite->runAction(rep);
}
Animation* getAnimation(constchar* plist, const char* frameFormat,float delay = 0.0f)
{
Animation* ani =AnimationCache::getInstance()->getAnimation(plist);
if (!ani)
{
loadAnimation(plist, frameFormat, delay);
ani = AnimationCache::getInstance()->getAnimation(plist);
}
ani->setDelayPerUnit(delay);
return ani;
}
void loadAnimation(constchar* plist, const char* frameFormat,float delay = 0.0f)
{
// 获得精灵帧缓存对象,并且将动画帧加载到缓存
SpriteFrameCache* cache =SpriteFrameCache::getInstance();
cache->addSpriteFramesWithFile(plist);
Vector<SpriteFrame*> frames;
for (int i = 1;; ++i)
{
char buf[128];
sprintf(buf, frameFormat, i);
SpriteFrame* frame =cache->getSpriteFrameByName(buf);
if (frame == NULL)
break;
frames.pushBack(frame);
}
Animation* animation =Animation::createWithSpriteFrames(frames,delay);
AnimationCache::getInstance()->addAnimation(animation,plist);
}
使用时直接用runAnimation(运行sprite,plist文件,小图格式规律,动画时间间隔)就可以了
- cocos动画
- Cocos动画
- cocos 动画
- cocos-2d动画
- Cocos骨骼动画
- cocos 动画整理
- Cocos添加动画
- cocos简易动画
- cocos 动画 触摸事件
- cocos骨骼动画
- COCOS 骨骼动画
- cocos动画系统及绘制
- Cocos Studio制作帧动画
- cocos-lua 场景切换动画
- COCOS学习笔记--骨骼动画
- cocos-lua帧动画使用
- cocos斗地主发牌动画
- cocos-Lua添加骨骼动画
- 虚幻4Matinee功能 基本概念及简单示例(Sequence编辑器)
- 【poj 2627】 Sudoku 题意&题解&代码(C++)
- 【iOS开发-103】解决方案:iOS8.1中UIBarButtonItem的setTitleTextAttributes对Disabled颜色设置无效
- sql约束
- 线程处理(C# 编程指南)学习笔记1
- Cocos动画
- UVA 11552——Fewest Flops
- ios中的反射
- git-am 和 format-patch 的使用
- struts2 文件上传
- linux常用命令
- Cocos骨骼动画
- mac端如何快速搭建一个web服务器
- 码农小汪-Hibernate学习4-关联关系映射many-to-one,many-to-one,one-to-many