本文转自:奶制品 http://8287044.blog.51cto.com/5179921/1028255

上回讲到如何用cocosbuilder拼接一个完整动画文件出来。

ok,这回就讲如何把动画文件导入到我们的游戏代码中并使用。

第一步:用cocosbuilder导出数据文件

很简单,选中要导出的ccb文件,然后点击file->publish就可以了。

导出的文件在你的项目目录下能找到,后缀为.ccbi的文件就是对应的ccb文件的数据导出文件了。

现在把playerAni.ccbi文件拷贝到我们vs的工程目录资源文件夹下

第二步:新建一个cocos2d-x工程

这里我以最简单的helloworld为例子就可以了

新建之后出现如下画面表示成功,这部分的内容可以去网上搜索,或者cocos2d-x官网了解

这里有个点要注意就是一定要在工程包含头文件的目录中加入 “e:\cocos2d-2.0-x-2.0.3\extensions"这个目录,e盘是我放置cocos2dx的目录,前面你们可以根据各自的具体目录具体设置。

第二步:添加ccbi文件读取类

基础的类可以从cocos2d-x的例子代码中截取,这里我给大家截取好了,3个基础动画类文件在附件中,大家可以下载使用,简单添加到工程就行了。

添加进基础文件之后,接下来,我们修改下HelloWorldScene.h和HelloWorldScene.cpp文件

首先是HelloWorldScene.h文件

头文件部分,我们要加入包含语句

  1. #include "cocos-ext.h"
  2. #include "AnimationsLayerLoader.h"
  3. using namespace cocos2d::extension;

接下来修改HelloWorldScene.cpp文件

在HelloWorldScene.cpp的init方法中插入下面的语句

  1. CCBAnimationManager *actionManager = NULL;
  2. CCNodeLoaderLibrary * ccNodeLoaderLibrary = CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary();
  3. ccNodeLoaderLibrary->registerCCNodeLoader("AnimationsTestLayerLoader", AnimationsTestLayerLoader::loader());
  4. cocos2d::extension::CCBReader * ccbReader = new cocos2d::extension::CCBReader(ccNodeLoaderLibrary);
  5. CCNode * node = ccbReader->readNodeGraphFromFile("boneCCb/playerAni.ccbi", this,&actionManager);
  6. ((AnimationsTestLayer*)node)->setAnimationManager(actionManager);
  7. ccbReader->release();
  8. node->setPosition(ccp(100,160));
  9. AnimationsTestLayer * spr = (AnimationsTestLayer *)node;
  10. if(node != NULL) {
  11. this->addChild(node);
  12. }

今后如果要加入其它动画,只需修改

CCNode * node = ccbReader->readNodeGraphFromFile("boneCCb/playerAni.ccbi", this,&actionManager);

这句代码中的ccbi文件名就可以了

ok,大功告成,接下来运行,看看效果

我们的player已经在窗口中了,接下来大家动手练习下吧
工程中需要添加的三个文件下面显示(就是test例子):
AnimationsLayerLoader.h
  1. #ifndef _ANIMATIONSTESTLAYERLOADER_H_
  2. #define _ANIMATIONSTESTLAYERLOADER_H_
  3. #include "AnimationsTestLayer.h"
  4. class CCBReader;
  5. class AnimationsTestLayerLoader : public cocos2d::extension::CCNodeLoader{
  6. public:
  7. CCB_STATIC_NEW_AUTORELEASE_OBJECT_METHOD(AnimationsTestLayerLoader, loader);
  8. protected:
  9. CCB_VIRTUAL_NEW_AUTORELEASE_CREATECCNODE_METHOD(AnimationsTestLayer);
  10. };
  11. #endif
AnimationsTestLayer.h
  1. #ifndef _ANIMATIONSTESTLAYER_H_
  2. #define _ANIMATIONSTESTLAYER_H_
  3. #include "cocos2d.h"
  4. #include "cocos-ext.h"
  5. class AnimationsTestLayer
  6. : public cocos2d::CCNode
  7. //, public cocos2d::extension::CCBSelectorResolver
  8. //, public cocos2d::extension::CCBMemberVariableAssigner
  9. {
  10. public:
  11. CCB_STATIC_NEW_AUTORELEASE_OBJECT_METHOD(AnimationsTestLayer,create);
  12. AnimationsTestLayer();
  13. virtual ~AnimationsTestLayer();
  14. //virtual cocos2d::SEL_MenuHandler onResolveCCBCCMenuItemSelector(CCObject * pTarget, cocos2d::CCString * pSelectorName);
  15. //virtual cocos2d::extension::SEL_CCControlHandler onResolveCCBCCControlSelector(cocos2d::CCObject * pTarget, cocos2d::CCString * pSelectorName);
  16. //virtual bool onAssignCCBMemberVariable(cocos2d::CCObject * pTarget, cocos2d::CCString * pMemberVariableName, cocos2d::CCNode * pNode);
  17. void setAnimationManager(cocos2d::extension::CCBAnimationManager *pAnimationManager);
  18. // void runActionfrom();
  19. private:
  20. cocos2d::extension::CCBAnimationManager *mAnimationManager;
  21. };
  22. #endif
AnimationsTestLayer.cpp
  1. #include "AnimationsTestLayer.h"
  2. USING_NS_CC;
  3. USING_NS_CC_EXT;
  4. AnimationsTestLayer::AnimationsTestLayer()
  5. : mAnimationManager(NULL)
  6. {}
  7. AnimationsTestLayer::~AnimationsTestLayer()
  8. {
  9. CC_SAFE_RELEASE_NULL(mAnimationManager);
  10. }
  11. //SEL_MenuHandler AnimationsTestLayer::onResolveCCBCCMenuItemSelector(CCObject * pTarget, CCString * pSelectorName)
  12. //{
  13. //    return NULL;
  14. //}
  15. //SEL_CCControlHandler AnimationsTestLayer::onResolveCCBCCControlSelector(CCObject *pTarget, CCString*pSelectorName) {
  16. //
  17. //
  18. //    return NULL;
  19. //}
  20. //bool AnimationsTestLayer::onAssignCCBMemberVariable(CCObject * pTarget, CCString * pMemberVariableName, CCNode * pNode) {
  21. //     CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "mAnimationManager", CCBAnimationManager *, this->mAnimationManager);
  22. //
  23. //    return false;
  24. //}
  25. void AnimationsTestLayer::setAnimationManager(cocos2d::extension::CCBAnimationManager *pAnimationManager)
  26. {
  27. //CC_SAFE_RELEASE_NULL(mAnimationManager);
  28. mAnimationManager = pAnimationManager;
  29. CC_SAFE_RETAIN(mAnimationManager);
  30. }
  31. //void AnimationsTestLayer::runActionfrom()
  32. //{
  33. //    mAnimationManager->runAnimations("first",3.3f);
  34. //}
  35. //void AnimationsTestLayer::onCCControlButtonIdleClicked(CCObject *pSender, CCControlEvent pCCControlEvent) {
  36. //    mAnimationManager->runAnimations("Idle", 0.3f);
  37. //}
以上为需要添加的三个文件
其他的就是helloworld了

helloworld.h
  1. #ifndef __HELLOWORLD_SCENE_H__
  2. #define __HELLOWORLD_SCENE_H__
  3. #include "cocos2d.h"
  4. #include "cocos-ext.h"
  5. #include "AnimationsLayerLoader.h"
  6. #include "SimpleAudioEngine.h"
  7. using namespace cocos2d::extension;
  8. class HelloWorld : public cocos2d::CCLayer
  9. {
  10. public:
  11. // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
  12. virtual bool init();
  13. // there's no 'id' in cpp, so we recommand to return the exactly class pointer
  14. static cocos2d::CCScene* scene();
  15. // a selector callback
  16. void menuCloseCallback(CCObject* pSender);
  17. // implement the "static node()" method manually
  18. CREATE_FUNC(HelloWorld);
  19. };
  20. #endif  // __HELLOWORLD_SCENE_H__
helloworld.cpp
在init中添加
  1. // Add the sprite to HelloWorld layer as a child layer.
  2. this->addChild(pSprite, 0);
  3. bRet = true;
  4. } while (0);
  5. CCBAnimationManager *actionManager = NULL;
  6. CCNodeLoaderLibrary * ccNodeLoaderLibrary = CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary();
  7. ccNodeLoaderLibrary->registerCCNodeLoader("AnimationsTestLayerLoader", AnimationsTestLayerLoader::loader());
  8. cocos2d::extension::CCBReader * ccbReader = new cocos2d::extension::CCBReader(ccNodeLoaderLibrary);
  9. CCNode * node = ccbReader->readNodeGraphFromFile("boneCCb/playerAni.ccbi", this,&actionManager);
  10. ((AnimationsTestLayer*)node)->setAnimationManager(actionManager);
  11. ccbReader->release();
  12. node->setPosition(ccp(100,160));
  13. AnimationsTestLayer * spr = (AnimationsTestLayer *)node;
  14. if(node != NULL) {
  15. this->addChild(node);
  16. }
  17. return bRet;

另外如果大家对动画方面想研究得更加深入,可以查阅火云洞红孩的博客

http://blog.csdn.net/honghaier/article/details/8075354

【转】使用cocosbuilder在cocos2d-…相关推荐

  1. 图文并茂使用CocosBuilder制作Cocos2D游戏 分享0

    图文并茂使用CocosBuilder制作Cocos2D游戏  分享0 目 录 The Game 设置工程 创建动画类型的主界面 本文由Zynga 工程师原创,翻译:Iven,张作宸,Butterfly ...

  2. 图文并茂使用CocosBuilder制作Cocos2D游戏

    手把手教你使用CocosBuilder一次性导出Cocos2d-html5,Cocos2d-x和Cocos2d-iPhone的游戏资源文件.这个游戏90%的工作量是用工具完成. CocosBuilde ...

  3. 从零开始学习CocosBuilder(转自泰然论坛)

    CocosBuilder是Cocos2d系列的配套开源工具,最新的版本是3.0a, 也是我们这个文章所采用的版本.CocosBuilder目前只有OS X版本, 没有Windows的版本, 而且开发语 ...

  4. 自学 cocos2d 游戏开发应该按什么步骤进行?

     著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:孙鹏飞 链接:http://www.zhihu.com/question/21114802/answer/22840 ...

  5. 网上搜集第三方(一)

    iOS开发-常用第三方开源框架介绍 为了了解一下目前第三方库的普及程度,下面列举一些知名App对第三方库的依赖. 网易新闻 AppleReachability ASIHTTPRequest EGOTa ...

  6. 开源 iOS 项目分类索引大全

    GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util  sstoolkit 一套Category类型的库,附带很多自定 ...

  7. iOS 开源项目(一)

    pod上面直接搜名字就好 系统基础库 sstoolkit 一套Category类型的库,附带很多自定义控件 功能不错- BlocksKit 将Block风格带入UIKit和Founcation coc ...

  8. 史上最全的iOS开源项目分类汇总

    学了这么久,还是抽时间把github上比较好用的第三方总结了一下: Category/Util sstoolkit 一套Category类型的库,附带很多自定义控件 功能不错- BFKit 又一套Ca ...

  9. github上比较好用的第三方

    本片博文转于:AirZilong的博客(个人感觉很不错,感谢 AirZilong的分享) 学了这么久,还是抽时间把github上比较好用的第三方总结了一下: Category/Util  sstool ...

  10. iOS-----GitHub上比较齐全的iOS 工具和App

    Github-iOS 工具 和 App 系统基础库 Category/Util  sstoolkit 一套Category类型的库,附带很多自定义控件 功能不错-        BFKit 又一套Ca ...

最新文章

  1. CesiumLab V1.2 新功能 倾斜数据处理
  2. leetcode 10 Regular Expression Matching
  3. python可以提高程序执行速度N倍你知道吗?
  4. eclipse +python 修改 各种颜色 +字体
  5. 总结界面框架_UI_Adapter
  6. git 删除tag_git使用教程9pycharm 使用 tag 打标签
  7. vim 环境写 markdown 的插件推荐
  8. SAP HANA如何在存储过程中使用自定义的table type
  9. 应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的(转载)...
  10. 字节跳动面试:java编程思想电子版非pdf
  11. 【李宏毅2020 ML/DL】P43-44 More about Adversarial Attack | Images Audio
  12. 规范信息系统工程建设市场 促进信息化健康发展
  13. java图文并排_JAVA如何实现图文混合显示
  14. lastwinner分红系统开发
  15. MySQL期末复习题(题库)
  16. 在集体奋斗中实现自己的价值
  17. HashSet及LinkedHashSet源码分析(基于JDK1.6)
  18. 算法系列1《DES》
  19. 【电脑使用】如何将电脑磁盘变为移动磁盘?
  20. 构造二叉树-前序遍历

热门文章

  1. linux内核是压测,从应用到内核查接口超时(中) -枕边书
  2. 数据库字段动态扩展设计
  3. fstream常用方法详解
  4. 生物信息学之抗癌药物反应论文阅读五:L1000+DTI
  5. arcgis 图层概念
  6. 逻辑回归原理介绍及Matlab实现
  7. PPT在线转换成视频的步骤
  8. word使用计算机题,巧用Word编题库
  9. Cortex-M3的时钟
  10. 数据挖掘之关联规则分析