CocoStudio sample讲解 SampleFlashImport 导入Flash动画

CocoStuido sample----SampleFlashImport 源代码地址
https://github.com/chukong/CocoStudioSamples
大家可以预先下载这个源代码, 等下要用到里面的图片资源哦
我们可能会遇到这样的情况, 一款Flash网页游戏需要移植到iOS/Android等移动平台去, 大量的Flash动画无法继续使用, 使用其他工具重新制作一遍费时费力. 幸好CocoStudio提供了Flash动画导入的功能, 可以迅速地将您的游戏呈现于玩家面前.
一 目标

在本教程里, 我们将学习下如何使用CocoStudio导入Flash动画, 并在cocos2d-x中运行.
我们使用的cocos2d-x的版本是2.2.2, CocoStudio的版本是1.2.0.1. 不同的版本, 功能上会有差异, 大家学习时, 最好采用对应的版本.
二 导入Flash并创建新项目

大家可以在下载到的源代码的SampleFlashImport\SampleFlashImport_Editor 目录下找到我们需要的girl.fla和tauren.fla
我们首先打开动画编辑器, 并在菜单选择 “文件” => “打开Flash项目”.

选择项目的名称并分别选择项目保存的路径以及tauren.fla所在路径.

三 接下来…
接下来要做什么捏? 由于CocoStudio强大的功能, fla中无论是动画结构, 还是动作列表都被完整地导入了. 如果您已经在Flash完成了动画制作, 那么在CocoStudio导入下, 导出下就可以啦. 当然, 如果您想在继续对动画做修改, 还是可以使用强大的CocoStudio继续完成.
四 导出资源
用快捷键Ctrl+E打开导出对话框, 选择导出的路径, 其他按默认配置我们得到了tauren.ExportJson tauren0.plist tauren0.png 这些文件. 我们稍后会用到这些文件.
当然, 请大家使用上面步骤也同样处理下gril.fla
五 在cocos2d-x工程中添加导出后的资源
想必各位看官都已经熟练掌握了cocos2d-x工程的创建, 我这里就不再啰嗦了.
创建完工程之后, 需要将我们上面用CocoStudio导出的几个文件拷贝到cocos2d-x工程的Resources文件夹下.
六 代码实现
我们要在cocos2d-x中加载上面导出的两个动画, 并点击下屏幕, 两个人物都切换到下一个动作. 我们直接在默认的cocos2d-x的HelloWorld上做修改.
我们先来看下修改后的HelloWorld类的头文件

class HelloWorld : public cocos2d:: CCLayer{public : virtual bool init(); virtual bool ccTouchBegan(cocos2d:: CCTouch *pTouch, cocos2d:: CCEvent *pEvent); virtual void registerWithTouchDispatcher();
static cocos2d:: CCScene * scene(); void menuCloseCallback( CCObject * pSender); CREATE_FUNC( HelloWorld );private : //保存右边怪物对象 cocos2d::extension:: CCArmature * tauren; //保存左边英雄对象 cocos2d::extension:: CCArmature * hero; //怪物当前播放动画序号 int countTauren; //英雄当前播放动画序号 int countHero;};
再来看下其实现中几个重要的函数

bool HelloWorld ::init(){ if ( ! CCLayer::init() ) { return false ; } CCSize visibleSize = CCDirector ::sharedDirector()->getVisibleSize(); CCPoint origin = CCDirector ::sharedDirector()->getVisibleOrigin();
CCMenuItemImage pCloseItem = CCMenuItemImage ::create( “CloseNormal.png” , “CloseSelected.png” , this , menu_selector (HelloWorld ::menuCloseCallback)); pCloseItem->setPosition( ccp (origin.x + visibleSize.width - pCloseItem->getContentSize().width/2 , origin.y + pCloseItem->getContentSize().height/2));
// create menu, it’s an autorelease object CCMenu
pMenu = CCMenu ::create(pCloseItem, NULL ); pMenu->setPosition(CCPointZero); this->addChild(pMenu, 1); //上面部分默认代码
//启用触摸 setTouchEnabled( true );
//默认播放第一个动画 countTauren = 0; countHero = 0; //加载两个动画的数据 CCArmatureDataManager ::sharedArmatureDataManager()->addArmatureFileInfo( “tauren0.png”, “tauren0.plist” ,“tauren.ExportJson” ); CCArmatureDataManager ::sharedArmatureDataManager()->addArmatureFileInfo( “girl0.png”, “girl0.plist” ,“girl.ExportJson” ); //创建怪物对象 tauren = CCArmature ::create(“tauren” ); tauren->setPosition( ccp (visibleSize.width * 0.7,visibleSize.height * 0.5)); tauren->getAnimation()->playWithIndex(0); //怪物默认播放第1个动画 tauren->setScale(0.7); //缩放 this ->addChild(tauren,1);

             //创建英雄对象                hero = CCArmature ::create("girl" );                hero->setPosition( ccp (visibleSize.width * 0.3,visibleSize.height * 0.5));                hero->getAnimation()->playWithIndex(0); //英雄默认播放第一个动画                 this ->addChild(hero,1);                                 //增加点击屏幕切换动画提示    CCLabelTTF* pLabel = CCLabelTTF ::create("Touch Screen to Change Animation" , "Arial", 30);    pLabel->setPosition( ccp (origin.x + visibleSize.width*0.5,                            origin.y + visibleSize.height * 0.1));                 this ->addChild(pLabel,0);       return true ;}

bool HelloWorld ::ccTouchBegan( CCTouch * pTouch , CCEvent * pEvent){ //分别获取怪物英雄的动画列表数量, 并计算下一个动画的序号 countTauren++; countTauren = countTauren tauren->getAnimation()->getMovementCount(); countHero++; countHero = countHero hero->getAnimation()->getMovementCount(); //点击后怪物和英雄都播放下一个动画 tauren->getAnimation()->playWithIndex(countTauren); hero->getAnimation()->playWithIndex(countHero);
return false ;}
void HelloWorld ::registerWithTouchDispatcher(){ //注册触摸事件 CCDirector ::sharedDirector()->getTouchDispatcher()->addTargetedDelegate( this, INT_MIN+1, true );}
好了, 大家的代码都写完了吧, 赶快运行一下吧!

Flash导入来了, 新鲜出炉…

运行调试的时候报这个错误

追到这里,实在不知道哪里错了

你这个导入flash是成功的吧?
如果是的话麻烦将导出数据传上来。

谢谢楼主热心回复 解决了 是2dx版本的问题 。。。我的是2.2.2 。。换成2.2.3就可以 了

测试过了。编译可以通过。很ok:7::7::7: 多谢版主分享:2::2::2:这是要火的节奏

如果设置 播放完毕切换动作 的那个监听函数会骨骼错位, 求解决方案

请问,我的COCOS 是V2.3.3.0版本,文件—下面只有打开项目,没有打开flash项目,这个怎么办?