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

     

     

     

  • 相关阅读:
    Javascript的一些小知识点
    Peterson和多线程版本号
    java 数据流DataOutputStream和DataInputstream
    Domino 怎样整Hibernate最佳实践
    学生管理系统
    最小生成树Kruskal算法的提出者Joseph Bernard Kruskal,Jr.
    创建一个Low-touch Silverlight 集成
    LeetCode OJ
    00106_UDP通信
    雷林鹏分享:jQuery EasyUI 树形菜单
  • 原文地址:https://www.cnblogs.com/gaoxiao228/p/2471222.html
Copyright © 2020-2023  润新知