【转】使用cocosbuilder在cocos2d-…

本文转自:奶制品 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.  
  4. using namespace cocos2d::extension; 

接下来修改HelloWorldScene.cpp文件

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

 

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

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

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::CCBMemberVariableAssigne
  9. {
  10. public:
  11.     CCB_STATIC_NEW_AUTORELEASE_OBJECT_METHOD(AnimationsTestLayer,create);
  12.     
  13.     AnimationsTestLayer();
  14.     virtual ~AnimationsTestLayer();
  15.     
  16.     //virtual cocos2d::SEL_MenuHandler onResolveCCBCCMenuItemSelector(CCObject * pTarget, cocos2d::CCString * pSelectorName);
  17.     //virtual cocos2d::extension::SEL_CCControlHandler onResolveCCBCCControlSelector(cocos2d::CCObject * pTarget, cocos2d::CCString * pSelectorName);
  18.     //virtual bool onAssignCCBMemberVariable(cocos2d::CCObject * pTarget, cocos2d::CCString * pMemberVariableName, cocos2d::CCNode * pNode);
  19.     
  20.    
  21.     
  22.     void setAnimationManager(cocos2d::extension::CCBAnimationManager *pAnimationManager);
  23.    // void runActionfrom();
  24. private:
  25.     cocos2d::extension::CCBAnimationManager *mAnimationManager;
  26. };

  27. #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了
【转】使用cocosbuilder在cocos2d-x中建立单独骨骼动画文件(二)

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.     
  16.     // a selector callback
  17.     void menuCloseCallback(CCObject* pSender);

  18.     // implement the "static node()" method manually
  19.     CREATE_FUNC(HelloWorld);
  20. };

  21. #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.youkuaiyun.com/honghaier/article/details/8075354

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值