通过 CCSpriteFrameCache 创建动画

分为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为我们带来的性能提升!!!

 

 

 

原文地址:https://www.cnblogs.com/gaoxiao228/p/2471222.html