cocos2d-x 2.0.2 创建动画的方式(根据png/swf)

猴子原创,欢迎转载。转载请注明: 转载自Cocos2D开发网--Cocos2Dev.com,谢谢!

原文地址: http://www.cocos2dev.com/?p=292

很早以前我写过了创建动画的一些方式,那都是1.x版本的时候,现在总有人问我,说创建不了动画,代码有问题。

 

2.x之后改了一些函数,其实出错了,自己看下应该会改的。

 

我今天就把创建动画的几种方式写一下。我封装了这个类,大家导入自己工程,静态方法调用就可以了。


头文件BYAnimationTool.h

//
//  BYAnimationTool.h
//  COG
//
//  Created by Yanghui Liu on 12-7-26.
//  Copyright (c) 2012年 BoyoJoy. All rights reserved.
//

#ifndef COG_BYAnimationTool_h
#define COG_BYAnimationTool_h


#include "cocos2d.h"
USING_NS_CC;

class BYAnimationTool {
public:
    static CCActionInterval* createAnimFormSwf(const char* swfName); 
    static CCActionInterval* createAnimFormSwf(const char* swfName,float frameTime); 
    static CCActionInterval* createRFAnimFormSwf(const char* swfName); 
    static CCActionInterval* createRFAnimFormSwf(const char* swfName,float frameTime); 
    
    static CCActionInterval* createRFAnimFormPng(const char* pngName,const char* frameName,int beginFrameIndex);
};

#endif

BYAnimationTool.cpp文件


//
//  BYAnimationTool.cpp
//  COG
//
//  Created by Yanghui Liu on 12-7-26.
//  Copyright (c) 2012年 BoyoJoy. All rights reserved.
//

#include "BYAnimationTool.h"

#define kDelayPerUnit 0.08f

//将SWF转成一次性动画
CCActionInterval* BYAnimationTool::createAnimFormSwf(const char* swfName){
    return createAnimFormSwf(swfName,kDelayPerUnit);
}

//将SWF转成一次性动画
CCActionInterval* BYAnimationTool::createAnimFormSwf(const char* swfName,float frameTime){
    char str1[100] = {0};
    char str2[100] = {0};
    CCSpriteFrameCache *cache = CCSpriteFrameCache::sharedSpriteFrameCache();
    sprintf(str1, "%s.plist", swfName);
    sprintf(str2, "%s.pvr.ccz", swfName);
    cache->addSpriteFramesWithFile(str1,str2);
    CCArray* animFrames = CCArray::create();
    int i = 0;
    do {
        sprintf(str2, "%s.swf/%04d", swfName,i);
        CCSpriteFrame *frame = cache->spriteFrameByName(str2);
        if (frame) {
            animFrames->addObject(frame);
        }else {
            break;
        }
    } while (++i);
    CCAnimation *animation = CCAnimation::createWithSpriteFrames(animFrames, frameTime);
    cache->removeSpriteFramesFromFile(str1);
    return CCAnimate::create(animation);
}

//将SWF转成永久性动画
CCActionInterval* BYAnimationTool::createRFAnimFormSwf(const char* swfName){
    return createRFAnimFormSwf(swfName,kDelayPerUnit);
}

//将SWF转成永久性动画 可以自定义帧率
CCActionInterval* BYAnimationTool::createRFAnimFormSwf(const char* swfName,float frameTime){
    return CCRepeatForever::create(createAnimFormSwf(swfName,frameTime));
}

//将PNG序列图转成永久性动画
CCActionInterval* BYAnimationTool::createRFAnimFormPng(const char* pngName,const char* frameName,int beginFrameIndexe){
    char str1[100] = {0};
    char str2[100] = {0};
    CCSpriteFrameCache *cache = CCSpriteFrameCache::sharedSpriteFrameCache();
    sprintf(str1, "%s.plist", pngName);
    sprintf(str2, "%s.pvr.ccz", pngName);
    cache->addSpriteFramesWithFile(str1,str2);
    CCArray* animFrames = CCArray::create();
    int i = beginFrameIndexe;
    do {
        sprintf(str2, "%s%04d.png", frameName,i);
        CCSpriteFrame *frame = cache->spriteFrameByName(str2);
        if (frame) {
            animFrames->addObject(frame);
        }else {
            break;
        }
    } while (++i);
    CCAnimation *animation = CCAnimation::createWithSpriteFrames(animFrames, kDelayPerUnit);
    cache->removeSpriteFramesFromFile(str1);
    return CCRepeatForever::create(CCAnimate::create(animation));
}



简单写了下注释,应该看得懂的。

 

使用方法:


CCSize winSize = CCDirector::sharedDirector()->getWinSize();

CCSprite* sprite = CCSprite::create();

sprite->setPosition(ccp(winSize.width*.5,winSize.height*.5));

addChild(sprite);

sprite->runAction(BYAnimationTool::createRFAnimFormSwf("test"));


BYAnimationTool::createRFAnimFormSwf("test") 是创建一个永久性重复播放的动画。

注意:

1、所有方法传入的文件名不要后缀。

2、png和swf是我使用了TexturePaker压缩了的。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值