总结一些精灵与动画操作的方法,其实主要是对CCSpriteFrameCache和CCAnimationCache的理解与使用
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"Jiangshi_Zoulu.plist"];
//根据一个plist文件名构建CCSpriteFrame对象并添加到内存池中。缺省了Texture文件名的构建方法,缺省的文件名先在_plist中查找,如果没有则查找和plist同名的文件。
CCAnimation *jiangshi_zoulu=[self animationFromPlist:@"Jiangshi_Zoulu" delay:0.2];
//根据plist内容生成动画,其实就是根据动画图片的名称生成动画,animationFromPlist函数在后面
[[CCAnimationCache sharedAnimationCache] addAnimation:jiangshi_zoulu name:@"jiangshi_zoulu"];
//向池中添加一个CCAnimation对象,索引的key为jiangshi_zoulu
//-------------------------------------------------------------------------------------------分割线
CCSprite *risex=[CCSprite spriteWithSpriteFrameName:@"risex_0001.png"];
//根据帧的名字创建一个精灵对象
CCAnimation *jiangshi=[[CCAnimationCache sharedAnimationCache] animationByName:@"jiangshi_zoulu"];
//根据key:jiangshi_zoulu从池中获取CCAnimation对象
id action=[CCAnimate actionWithAnimation:jiangshi];
//根据CCAnimation生成动画效果CCAnimate
[risex runAction:[CCRepeatForever actionWithAction:action]];
//让精灵risex重复执行动画效果
//-------------------------------------------------------------------------------------------分割线
[[CCAnimationCache sharedAnimationCache] removeAnimationByName:@"jiangshi_zoulu"];
//根据key从池中删除CCAnimation对象
[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromFile:@"Jiangshi_Zoulu.plist"];
//从内存池删除plist中列出的Frame,相当于addSpriteFramesWithFile的逆向操作
//-------------------------------------------------------------------------------------------分割线
//生成动画函数
- (CCAnimation *)animationFromPlist:(NSString *)animPlist delay:(float)delay {
NSString *plistPath = [[NSBundle mainBundle] pathForResource:animPlist ofType:@"plist"]; // 1
NSMutableDictionary* dict = [[[NSMutableDictionary alloc] initWithContentsOfFile:plistPath] autorelease];
//读取plist内容到字典dict中
NSArray *items=[dict valueForKey:@"frames"];
int itemcount = [items count];//图片数目即动画长度
NSMutableArray *AnimFrames = [NSMutableArray array];
//初始化用于存放帧的数组
for (int i = 1; i <= itemcount; i++) {
NSString *path = [NSString stringWithFormat:@"%@_%04d.png",animPlist,i];
//组成动画图片的命名规则是:XXX_0001.png、XXX_0001.png...
[AnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:path]];
//根据key(图片名)在内存池中查找Frame并存入帧数组中
}
return [CCAnimation animationWithFrames:AnimFrames delay:delay];//根据帧数组生成动画
}
//-------------------------------------------------------------------------------------------分割线
//精灵换图函数
-(void)changeImageBtn:(CCSprite *)changesprite imagePath:(NSString *)imagePath{
CCSpriteFrame* hpframe = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:imagePath];
//根据key(图片名)在内存池中查找Frame并返回
[changesprite setDisplayFrame:hpframe];//精灵换图
}
//-------------------------------------------------------------------------------------------分割线
//CCSpriteBatchNode,它的作用是优化精灵,提高精灵的绘制效率,精灵数量越多,效果越明显。它的工作原理是:将所有该对象的子节点(只能是精灵)用openGL的渲染方法一次性绘制,这样可以省去多次open-close的时间,_作为CCSpriteBatchNode对象子节点的精灵不能用自己的Texture绘制,而是用CCSpriteBatchNode对象的Texture统一绘制,精灵只是提供坐标、旋转角度等信息,这就是它只需要open-close一次的原因,但也正因为如此,导致批处理节点的所有子节点都必须和它用同一套Texture,即CCSpriteBatchNode对象绘制出的图形都是一样的,这点需要格外注意。CCSpriteBatchNode的用法和普通精灵没什么两样,都可以设置Texture,也都是用Texture来绘制,只要通过addChild方法成为其子节点的精灵,都会得到它的优化,但是CCSpriteBatchNode只能添加精灵为子节点。
CCSpriteBatchNode* batch=[CCSpriteBatchNode batchNodeWithFile:@"bullet.pvr.ccz"];
[self addChild:batch];
//CCSpriteBatchNode加到层中
for(int i=0;i<100;i++){
CCSprite* sprite=[CCSprite spriteWithFile:@"bullet.png"];
[batch addChild:bullet];
//添加子节点,子节点必须是精灵,且精灵的Texture和批处理节点相同
}
分享到:
相关推荐
(译)cocos2d精灵教程:第二部分.pdf (译)cocos2d菜单教程:第一部分.pdf (译)cocos2d菜单教程:第三部分(完).pdf (译)cocos2d菜单教程:第二部分.pdf (译)使用cocos2d和box2d来制作一个platformer...
使用Cocos Studio 创建的帧动画,使用Cocos Studio 创建帧动画可以提高开发效率,节约开发成本
一个人物奔跑的效果,利用自己写的CAnimate类辅助精灵创建动画
4.11.2 CocosBuilder编辑器中的精灵动画 137 4.11.3 SpriteX草莓编辑器 138 4.11.4 MotionWelder动画编辑器 139 4.12 样例程序 141 4.13 本章小结 143 第5章 用户交互 147 5.1 概述 147 5.2 玩家交互信息 149 5.3 ...
本文实践自 Ray Wenderlich、Tony Dahbura 的文章《How to Use Animations and Sprite Sheets in Cocos2D 2.X》,文中使用Cocos2D,我在这里使用Cocos2D-x 2.1.4进行学习和移植。在这篇文章,将会学习到如何创建一个...
本书共29章,按内容结构可分为六篇: 第一篇开发基础,即第2章~第8章,内容包括Cocos2d-x简介、环境搭建、字符串、标签、菜单、精灵、场景、层、动作、特效、动画和Cocos2d-x用户事件。 第二篇开发进阶,即第9章~...
通过这个例子可以学到了很多有关场景、布景层、精灵、菜单、标签、场景切换动画等很多知识。
基础知识的介绍,元素的基本关系,精灵元素的属性,动画,帧动画、事件机制的简单介绍
带有法线贴图的 Cocos2D 动态光照演示 Andreas Loew / CodeAndWeb GmbH 的教程 感谢 Cocos2d 论坛对 Swift 端口的 collidernyc 该演示在不同的动态光照场景中使用相同的法线贴图精灵。 可以拖动光源从不同角度照亮...
扣血有动画效果 d.按下JUMP按钮,主角可以向上弹跳 2.游戏包含的开发要点: a.地图无限滚动 b.精灵动作的使用 c.按钮回调 d.滑动条控件的使用 e.简单的碰撞检测 f.update函数的使用 */
(译)cocos2d精灵教程:第一部分.pdf (译)cocos2d精灵教程:第三部分.pdf (译)cocos2d精灵教程:第二部分.pdf (译)cocos2d菜单教程:第一部分.pdf (译)cocos2d菜单教程:第三部分(完).pdf (译)cocos2d...
6.2 精灵动画初体验 6.3 用于创建动画的辅助类别 6.4 使用纹理图册 6.4.1 何为纹理图册 6.4.2 zwoptex工具介绍 6.4.3 使用zwoptex桌面版创建纹理图册 6.4.4 在cocos2d中使用纹理图册 6.4.5 改进...
cocos2d精灵的动画,从网上下载的,可能不是很全,毕竟是别人的,不是自己手写的
(译)cocos2d精灵教程:第一部分.pdf (译)cocos2d精灵教程:第三部分.pdf (译)cocos2d精灵教程:第二部分.pdf (译)cocos2d菜单教程:第一部分.pdf (译)cocos2d菜单教程:第三部分(完).pdf (译)cocos2d...
Cocos2d-x 动态光照演示这个简单的 Cocos2d-x 项目演示了如何从精灵表加载精灵帧创建动画用法线贴图初始化点光源效果并启发你的动画这是完整的教程:设置为了保持存储库的大小,我们没有将 Cocos2d-x 本身添加到存储...
实现了精灵向右运动到地图中间时,地图能跟着移动,但此时精灵是原地不动只是播放跑动画。并且,当地图移动到边缘时,地图不在移动,但此时精灵能移动同时播放跑动画。有不懂的地方,具体可以看我的文章 ...
一、运动中的加速度 二、拖动间隐效果(比如子弹的运动轨迹) 三、图形绘制 ...cocos2d-x中的CCArray使用注意 十一、屏幕旋转,schedule 和系统语言(后面再看) 十二、音乐音效 十三、CCRenderTexture