利用Cocostudio动画编辑器导出资源播放动画

<1>

#ifndef __Eliminate__AnimationSprite__
#define __Eliminate__AnimationSprite__

#include <stdio.h>
#include "cocos2d.h"
#include "cocostudio/CocoStudio.h"

USING_NS_CC;
using namespace std;
using namespace cocostudio;

//----------
///普通的动物
//----------

typedef enum {
    DISPLAY_MODE_NORMAL = 0,//正常
    DISPLAY_MODE_HORIZONTAL,//消除所在列的精灵
    DISPLAY_MODE_VERTICAL,//消除所在行的精灵
    DISPLAY_MODE_TL,//t、l型
    DISPLAY_MODE_OVERFIVE,//五个以上消除
    DISPLAY_MODE_CENTER,//十字型
    DISPLAY_MODE_FF,//向外扩散一个格
    DISPLAY_MODE_HHH,//三列
    DISPLAY_MODE_VVV,//三行
    DISPLAY_MODE_CRYSTAL      //结晶  --jn新增
} DisplayMode;


class AnimationSprite:public Armature
{
public:
    AnimationSprite(int row,int col,int imgIndex);
    
    static AnimationSprite *create(const std::string& name,int row,int imgIndex);
    
    void playAnimation(string name);
    
    CC_SYNTHESIZE(int,m_row,Row); //列
    CC_SYNTHESIZE(int,m_col,Col); //行
    CC_SYNTHESIZE(int,m_imgIndex,ImgIndex); //标记索引
    CC_SYNTHESIZE(int,m_score,Score);
    CC_SYNTHESIZE(bool,m_isNeedRemove,IsNeedRemove); //是否需要移除
    CC_SYNTHESIZE(bool,m_ignoreCheck,IgnoreCheck);
    CC_SYNTHESIZE(bool,m_isTouchEable,IsTouchEable);
    CC_SYNTHESIZE(bool,m_isSpecial,IsSpecial); //标记是否是通过特殊元素交换形成的特殊元素
    //CC_SYNTHESIZE(DisplayMode,m_displayMode,DisplayMode);
    CC_PROPERTY(DisplayMode,DisplayMode);  //--jn新增
    
    CC_SYNTHESIZE(bool,m_isNeedToPlayEffect,IsNeedToPlayEffect);
    
    void setOverFiveImg();
private:
    Armature* _armatureHeng;   //横消动画
    Armature* _armatureShu;    //竖消动画
};
#endif /* defined(__Eliminate__AnimationSprite__) */
#include "AnimationSprite.h"
#include "DataConfig.h"
#include "BasicInclude.h"

AnimationSprite::AnimationSprite(int row,int imgIndex)
{
    
    ArmatureDataManager::getInstance()->addArmatureFileInfo("Animals/xiongmao_Animation0.png","Animals/xiongmao_Animation0.plist","Animals/xiongmao_Animation.ExportJson");
    ArmatureDataManager::getInstance()->addArmatureFileInfo("Animals/tuzi_Animation0.png","Animals/tuzi_Animation0.plist","Animals/tuzi_Animation.ExportJson");
    ArmatureDataManager::getInstance()->addArmatureFileInfo("Animals/qingwa_Animation0.png","Animals/qingwa_Animation0.plist","Animals/qingwa_Animation.ExportJson");
    ArmatureDataManager::getInstance()->addArmatureFileInfo("Animals/qie_Animation0.png","Animals/qie_Animation0.plist","Animals/qie_Animation.ExportJson");
    ArmatureDataManager::getInstance()->addArmatureFileInfo("Animals/laohu_Animation0.png","Animals/laohu_Animation0.plist","Animals/laohu_Animation.ExportJson");
    ArmatureDataManager::getInstance()->addArmatureFileInfo("Animals/huliAnimation0.png","Animals/huliAnimation0.plist","Animals/huliAnimation.ExportJson");
    ArmatureDataManager::getInstance()->addArmatureFileInfo("Animals/zusNewAnimation0.png","Animals/zusNewAnimation0.plist","Animals/zusNewAnimation.ExportJson");
    
    this->m_row = row;
    this->m_col = col;
    this->m_imgIndex = imgIndex;
    this->m_score = 5;
    this->m_isNeedRemove = false; 
    this->m_ignoreCheck = false;
    this->m_isTouchEable = false;
    this->m_isSpecial = false;
    this->m_displayMode = DISPLAY_MODE_NORMAL;
    
    _armatureHeng = NULL;
    _armatureShu = NULL;
    
    m_isNeedToPlayEffect = true;
}

AnimationSprite *AnimationSprite::create(const std::string& name,int imgIndex)
{
    AnimationSprite *armature = new AnimationSprite(row,col,imgIndex);
    if (armature && armature->init(name))
    {
        armature->autorelease();
        return armature;
    }
    CC_SAFE_DELETE(armature);
    return nullptr;
}

void AnimationSprite::playAnimation(string name)
{
    if(this->getAnimation()){
        this->getAnimation()->play(name);
    }else{
        log("<<<animation 不可为空!!! AnimationSprite::playAnimation");
    }
}

void AnimationSprite::setDisplayMode(DisplayMode var){
    m_displayMode = var;
    
    ArmatureDataManager::getInstance()->addArmatureFileInfo("SpecialEffect/teshudaoju_NewAnimation0.png","SpecialEffect/teshudaoju_NewAnimation0.plist","SpecialEffect/teshudaoju_NewAnimation.ExportJson");
    
    
    if(m_displayMode != DISPLAY_MODE_NORMAL){
        playAudio(siwuxiaoEffect);
    }
    
    if(m_displayMode == DISPLAY_MODE_HORIZONTAL){
        
        if(!_armatureShu){
            _armatureShu = Armature::create("teshudaoju_NewAnimation");
            _armatureShu->getAnimation()->play("zongxiang");
            this->addChild(_armatureShu,100);
            
            log("Anchorpoint,x: %f,y:%f",_armatureShu->getAnchorPoint().x,_armatureShu->getAnchorPoint().y);
        }
    }else if (m_displayMode == DISPLAY_MODE_VERTICAL){
        
        if(!_armatureHeng){
            _armatureHeng = Armature::create("teshudaoju_NewAnimation");
            _armatureHeng->getAnimation()->play("hengxiang");
            this->addChild(_armatureHeng,101);
        }
    }else if(m_displayMode == DISPLAY_MODE_TL){ //TL的特效目前还没有
        
        if(!_armatureShu){
            _armatureShu = Armature::create("teshudaoju_NewAnimation");
            _armatureShu->getAnimation()->play("zongxiang");
            this->addChild(_armatureShu,100);
            
            _armatureHeng = Armature::create("teshudaoju_NewAnimation");
            _armatureHeng->getAnimation()->play("hengxiang");
            this->addChild(_armatureHeng,101);
            
        }
        
    }else if (m_displayMode == DISPLAY_MODE_OVERFIVE){
//        setOverFiveImg();
//        log("<<<fengche");
    }
}

DisplayMode AnimationSprite::getDisplayMode(){
    return m_displayMode;
}

void AnimationSprite::setOverFiveImg(){
//    playAnimation("fengche");  //这样时不行的。。。在这添加一个动画的特效还差不多
}
<2>
ArmatureDataManager::getInstance()->addArmatureFileInfo("menu/startMenu/zhujiemian_Animation0.png","menu/startMenu/zhujiemian_Animation0.plist","menu/startMenu/zhujiemian_Animation.ExportJson");
Armature *armatureSun = Armature::create("zhujiemian2_Animation");
armatureSun->setPosition(winSize.width / 2,winSize.height / 2);
armatureSun->getAnimation()->playWithIndex(0);
armatureSun->setScale(winScaleMin); //----jn
this->addChild(armatureSun,-1); 
armatureSun->getAnimation()->setMovementEventCallFunc(this,movementEvent_selector(StartScene::movementCallback));


void StartScene::movementCallback(Armature * armature,MovementEventType type,const std::string& movementID){
    if (type == COMPLETE)
    {
        if (strcmp(movementID.c_str(),"guang") == 0)
        {
            armature->getAnimation()->playWithIndex(1,1,1);
        }
    }
}


<3>
Armature *armature = Armature::create("teshudaoju_NewAnimation");  //锤子爆破特效  --jn新增
armature->setPosition(point);
armature->getAnimation()->play("chuizi");
m_spLayer->addChild(armature,10);
removeArmature(armature);
void GameScene::removeArmature(Node *node)
{
    Armature *armature = (Armature *)node;
    if (armature) {
        armature->getAnimation()->setMovementEventCallFunc(this,movementEvent_selector(GameScene::movementCallback));
    }
}

#pragma mark 将动画移除
void GameScene::movementCallback(Armature * armature,const std::string& movementID)
{
    if (type == COMPLETE)
    {
        armature->removeFromParent();
    }
}

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...