zoukankan      html  css  js  c++  java
  • 用 cocos2d 创建帧动画

    在 cocos2d 中,大部分 动画 都是预先渲染好的位图。然后通过快速轮换来给玩家一种动态的感觉。例如下面的一系列位 图,快速轮换时就是一朵随风而动的雏菊。按照下面的步骤就可以

    cocos2d中,大部分动画都是预先渲染好的位图。然后通过快速轮换来给玩家一种动态的感觉。例如下面的一系列位 图,快速轮换时就是一朵随风而动的雏菊。按照下面的步骤就可以很容易的创建帧动画:

      • 创建包含各个帧的png图片

      • 将png 图片序列合并为一个png

      • 生成CCSpriteSheet需要的.plist

    • 在游戏中使用 CCSprite显示动画


    创建包含各个帧的png图片

    要创建动画,Flash是一个非常好用的工具。而Flash提供了将帧动画导出为png图片序列的功能。假设我们的动画已经用Flash制作完成,保存成名 为Flower9001的元件。现在打开包含这个元件的.fla文件,按照下列步骤生成png图片序列。

    将元件 拖放到画布上,调整好元件大小。然后修改元件类型为“Graphics”:


    接下来按照元件的帧数,在时间轴上添加相同的帧数。最终结果如下:


    预览一下可以看到动态花卉后,就可以使用Flash的File->Export->Export Movie功能将动画导出为png图片序列:



    导出类型应该选为PNG Sequence,并选择Include为“Minimum Image Area”,选择Colors为“24 bit with alpha channel”:



    导出完成后,可以得到一系列的png图片,文件名为Flower0001.png到 Flower0063.png:




    将png图片序列转换为CCSpriteSheet需要的格式

    启 动Zwoptex,新建一个.zss文件,然后将刚刚创建好的png图片全部拖放到Zwoptex窗口中:



    设定Zwoptex的Layout面板中的Sort On选项为“Name”,再调整Canvas面板中的Width和Height为合适的大小,确保能够容纳所有的png图片。设定后,点击Layout面 板中的Apply按钮,可以自动调整png图片的布局,最终需要确保没有重叠的图片



    调整完成后。点击Export面板中的Save .png和Save .plist按钮,分别生成合并后的png图片,以及所有帧的.plist文件。

    导出的png图片命名为 Flower.png,.plist文件命名为Flower.plist。



    在cocos2d中使用CCSpriteSheet创建动画

    XCode中新建基于cocos2d的项目,命名为Make Sprite Anim。并将Flower.png和Flower.plist导入Resources群组中。

    新建Config.h文件,内容为:

    1. // 花卉动画的帧数
    2. #define FLOWER_SPRITE_SHEET_CAPACITY 63



    并确保HelloWorldScene.m和FlowerSprite.m文件的开头用#import “Config.h”导入Config.h文件。

    修改HelloWorldScene.m文件,将init方法改为:

    1. -(id) init
    2. {
    3.     self = [super init];
    4.     if (self) {
    5.         // 将花朵的png图片序列和plist载入场景
    6.         CCSpriteFrameCache *cache = [CCSpriteFrameCache sharedSpriteFrameCache];
    7.         [cache addSpriteFramesWithFile:@"Flower.plist"];
    8.         id sheet = [CCSpriteSheet spriteSheetWithFile:@"Flower.png"
    9.                     capacity:FLOWER_SPRITE_SHEET_CAPACITY];
    10.         [self addChild:sheet];
    11.  
    12.         // 将花朵Sprite添加到场景中
    13.         FlowerSprite *sprite = [FlowerSprite node];
    14.         CGSize size = [[CCDirector sharedDirector] winSize];
    15.         sprite.position = ccp(size.width / 2, size.height / 2);
    16.         [self addChild:sprite];
    17.     }
    18.     return self;
    19. }


    前半部分代码的作用是将Flower.png和Flower.plist导入 CCSpriteFrameCache(帧缓存),以便后续构造FlowerSprite对象时直接使用缓存的数据。

    新建一个 CCSprite的继承类,命名为FlowerSprite。修改FlowerSprite.m,增加init方法:

    1. - (id) init {
    2.     self = [super init];
    3.     if (self) {
    4.         CCSpriteFrameCache *cache = [CCSpriteFrameCache sharedSpriteFrameCache];
    5.         NSMutableArray *frames = [[NSMutableArray array] retain];
    6.         // 构造每一个帧的实际图像数据
    7.         for (int i = 1; i <= FLOWER_SPRITE_SHEET_CAPACITY; i++) {
    8.             NSString *frameName = [NSString stringWithFormat:@"Flower%04d.png", i];
    9.             CCSpriteFrame *frame = [cache spriteFrameByName:frameName];
    10.             [frames addObject:frame];
    11.         }
    12.  
    13.         // 使用CCAnimation和CCRepeatForever构造一个一直重复的动画
    14.         NSString *firstFrameName = [NSString stringWithFormat:@"Flower%04d.png", 1];
    15.         id sprite = [CCSprite spriteWithSpriteFrameName:firstFrameName];
    16.         CCAnimation *animation = [CCAnimation animationWithName:@"Flower"
    17.                                                           delay:1.0f / 30
    18.                                                          frames:frames];
    19.         [sprite runAction:[CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:animation
    20.                            restoreOriginalFrame:NO]]];
    21.         // 将构造好的动画加入显示列表
    22.         [self addChild:sprite];
    23.     }
    24.     return self;
    25. }

    最后,编译运行就可以看到我们的花卉动画了。

    本教程由 CocoaChina 会员“dualface”发布,原帖地址http://www.cocoachina.com/bbs/read.php?tid-25854.html
  • 相关阅读:
    Java框架介绍-13个不容错过的框架项目
    微信公众号 模板消息开发
    微信授权-授权方式、公众号是否关注
    Java Spring-Spring与Quartz整合
    Java框架搭建-Maven、Mybatis、Spring MVC整合搭建
    IOS UIView 04- 自定义控件
    IOS UIView 03- 自定义 Collection View 布局
    IOS UIView 02- 深入理解 Scroll Views
    MVC架构中的Repository模式 个人理解
    零开始的领域驱动设计
  • 原文地址:https://www.cnblogs.com/worldtraveler/p/2859303.html
Copyright © 2011-2022 走看看