分为5个步骤
1,缓冲sprite帧和纹理
[[CCSpriteFrameCache sharedSpriteFrameCache]addSpriteFramesWithFile@"bear.plist"];
首先,调用CCSpriteFrameCache的addSpriteFramesWithFile方法,然后把Zwoptex生成的plist文件当作参数传进去。这个方法做了以下几件事:
- 寻找工程目录下面和输入的参数名字一样,但是后缀是.png的图片文件。然后把这个文件加入到共享的CCTextureCache中。(这我们这个例子中,就是加载AnimBear.png)
- 解析plist文件,追踪所有的sprite在spritesheet中的位置,内部使用CCSpriteFrame对象来追踪这些信息。
2,创建一个精灵批处理结点
CCSpriteBatchNode *spriteSheet =[CCSpriteBatchNode batchNodeWithFile:@"bear.png"]; [ self addChild:spriteSheet];
接下来,创建CCSpriteBatchNode对象,把spritesheet当作参数传进去。spritesheet在cocos2d中的工作原理如下:
- 你创建一个CCSpriteBatchNode对象,通过传递一个包含所有sprite的spritesheet的名字作为参数,并把它加入到当前场景之中。
- 接下来,你从spritesheet中创建的任何sprite,你应该把它当作CCSpriteBatchNode的一个孩子加进去。只要sprite包含在spritesheet中,那么就没问题,否则会出错。
- CCSpriteBatchNode可以智能地遍历它的所有的孩子结点,并通过一次OpenGL ES call来渲染这些孩子,而不是以前每个sprite都需要一个OpenGL call,这样渲染速度就会更快。
注意:CCSpriteBatchNode以前叫做CCSpriteSheet,你可能会在一起比较老的代码里面看见它。
3) 收集帧列表
NSMutableArray *frameArray =[NSMutableArray array]; for(int i = 0;i <= 8;i++) { CCSpriteFrame *spriteframe = [[CCSpriteFrame sharedSpriteFrameCache]spriteFrameByName:[NSString stringWithFormat:@"bear%i.png",i]]; [frameArray addObject:spriteframe] ;
建一系列的动画帧,我们简单地遍历我们的图片名字(它们是按照Bear1.png-->Bear8.png的方式命名的),然后使用共享的 CCSpriteFrameCache来获得每一个动画帧。记住,它们已经在缓存里了,因为我们前面调用了 addSpriteFramesWithFile方法。
4) 创建动画对象
CCAnimation *anim = [CCAnimation actionWithFrames:frameArray delay:0.1f];
接下来,我们通过传入sprite帧列表来创建一个CCAnimation对象,并且指定动画播放的速度。我们使用0.1来指定每个动画帧之间的时间间隔。
5) 创建sprite并且让它run动画action
CCSprite *bear = [CCSprite spriteWithSpriteFrameName:@"bear1.png"]; bear.positon = ccp(500,500); CCAtion *action = [CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:anim restoreOriginalFrame:NO]]; [bear runAction:action]; [spriteSheet addChild:bear];
我们首先通过spriteframe来创建一个sprite,并把它放在屏幕中间。然后,生成CCAnimationAction,并赋值给场景的walkAction属性,最后让熊来运行这个action。
最后,我们把熊加个场景中--把它当作spritesheet的孩子加到spritesheet中去。注意,如果在这里我们没有把它加到spritsheet中,而是加到当前层里面的话。那么我们将得不到spritesheet为我们带来的性能提升!!!