#ifndef _CCB_CCBREADER_H_

#define _CCB_CCBREADER_H_

#include "cocos2d.h"

#include "ExtensionMacros.h"

#include <string>

#include <vector>

#include "CCBSequence.h"

#define CCB_STATIC_NEW_AUTORELEASE_OBJECT_METHOD(T, METHOD) static T * METHOD() { \

T * ptr = new T(); \

if(ptr != NULL) { \

ptr->autorelease(); \

return ptr; \

} \

CC_SAFE_DELETE(ptr); \

return NULL; \

}

#define CCB_STATIC_NEW_AUTORELEASE_OBJECT_WITH_INIT_METHOD(T, METHOD) static T * METHOD() { \

T * ptr = new T(); \

if(ptr != NULL && ptr->init()) { \

ptr->autorelease(); \

return ptr; \

} \

CC_SAFE_DELETE(ptr); \

return NULL; \

}

#define kCCBVersion 5

enum {

kCCBPropTypePosition = 0,

kCCBPropTypeSize,

kCCBPropTypePoint,

kCCBPropTypePointLock,

kCCBPropTypeScaleLock,

kCCBPropTypeDegrees,

kCCBPropTypeInteger,

kCCBPropTypeFloat,

kCCBPropTypeFloatVar,

kCCBPropTypeCheck,

kCCBPropTypeSpriteFrame,

kCCBPropTypeTexture,

kCCBPropTypeByte,

kCCBPropTypeColor3,

kCCBPropTypeColor4FVar,

kCCBPropTypeFlip,

kCCBPropTypeBlendmode,

kCCBPropTypeFntFile,

kCCBPropTypeText,

kCCBPropTypeFontTTF,

kCCBPropTypeIntegerLabeled,

kCCBPropTypeBlock,

kCCBPropTypeAnimation,

kCCBPropTypeCCBFile,

kCCBPropTypeString,

kCCBPropTypeBlockCCControl,

kCCBPropTypeFloatScale,

kCCBPropTypeFloatXY

};

enum {

kCCBFloat0 = 0,

kCCBFloat1,

kCCBFloatMinus1,

kCCBFloat05,

kCCBFloatInteger,

kCCBFloatFull

};

enum {

kCCBPlatformAll = 0,

kCCBPlatformIOS,

kCCBPlatformMac

};

enum {

kCCBTargetTypeNone = 0,

kCCBTargetTypeDocumentRoot = 1,

kCCBTargetTypeOwner = 2,

};

enum

{

kCCBKeyframeEasingInstant,

kCCBKeyframeEasingLinear,

kCCBKeyframeEasingCubicIn,

kCCBKeyframeEasingCubicOut,

kCCBKeyframeEasingCubicInOut,

kCCBKeyframeEasingElasticIn,

kCCBKeyframeEasingElasticOut,

kCCBKeyframeEasingElasticInOut,

kCCBKeyframeEasingBounceIn,

kCCBKeyframeEasingBounceOut,

kCCBKeyframeEasingBounceInOut,

kCCBKeyframeEasingBackIn,

kCCBKeyframeEasingBackOut,

kCCBKeyframeEasingBackInOut,

};

enum

{

kCCBPositionTypeRelativeBottomLeft,

kCCBPositionTypeRelativeTopLeft,

kCCBPositionTypeRelativeTopRight,

kCCBPositionTypeRelativeBottomRight,

kCCBPositionTypePercent,

kCCBPositionTypeMultiplyResolution,

};

enum

{

kCCBSizeTypeAbsolute,

kCCBSizeTypePercent,

kCCBSizeTypeRelativeContainer,

kCCBSizeTypeHorizontalPercent,

kCCBSizeTypeVerticalPercent,

kCCBSizeTypeMultiplyResolution,

};

enum

{

kCCBScaleTypeAbsolute,

kCCBScaleTypeMultiplyResolution

};

NS_CC_EXT_BEGIN

/**

* @addtogroup cocosbuilder

* @{

*/

class CCBFile : public CCNode

{

private:

CCNode *mCCBFileNode;

public:

CCBFile();

static CCBFile* create();

CCNode* getCCBFileNode();

void setCCBFileNode(CCNode *pNode); // retain

};

/* Forward declaration. */

class CCNodeLoader;

class CCNodeLoaderLibrary;

class CCNodeLoaderListener;

class CCBMemberVariableAssigner;

class CCBSelectorResolver;

class CCBAnimationManager;

class CCData;

class CCBKeyframe;

/**

* @brief Parse CCBI file which is generated by CocosBuilder

*/

class CCBReader : public CCObject

{

private:

CCData *mData;

unsigned char *mBytes;

int mCurrentByte;

int mCurrentBit;

std::vector<std::string> mStringCache;

std::set<std::string> mLoadedSpriteSheets;

CCObject *mOwner;

CCBAnimationManager *mActionManager; //retain

CCDictionary* mActionManagers;

std::set<std::string> *mAnimatedProps;

CCNodeLoaderLibrary *mCCNodeLoaderLibrary;

CCNodeLoaderListener *mCCNodeLoaderListener;

CCBMemberVariableAssigner *mCCBMemberVariableAssigner;

CCBSelectorResolver *mCCBSelectorResolver;

std::vector<std::string> mOwnerOutletNames;

CCArray* mOwnerOutletNodes;

CCArray* mNodesWithAnimationManagers;

CCArray* mAnimationManagersForNodes;

std::vector<std::string> mOwnerCallbackNames;

CCArray* mOwnerCallbackNodes;

std::string mCCBRootPath;

bool hasScriptingOwner;

bool init();

public:

bool jsControlled;

CCBReader(CCNodeLoaderLibrary *pCCNodeLoaderLibrary, CCBMemberVariableAssigner *pCCBMemberVariableAssigner = NULL, CCBSelectorResolver *pCCBSelectorResolver
= NULL, CCNodeLoaderListener *pCCNodeLoaderListener = NULL);

CCBReader(CCBReader *pCCBReader);

virtual ~CCBReader();

CCBReader();

void setCCBRootPath(const char* pCCBRootPath);

const std::string& getCCBRootPath() const;

CCNode* readNodeGraphFromFile(const char *pCCBFileName);

CCNode* readNodeGraphFromFile(const char *pCCBFileName, CCObject *pOwner);

CCNode* readNodeGraphFromFile(const char *pCCBFileName, CCObject *pOwner, const CCSize &parentSize);

CCNode* readNodeGraphFromData(CCData *pData, CCObject *pOwner, const CCSize &parentSize);

CCScene* createSceneWithNodeGraphFromFile(const char *pCCBFileName);

CCScene* createSceneWithNodeGraphFromFile(const char *pCCBFileName, CCObject *pOwner);

CCScene* createSceneWithNodeGraphFromFile(const char *pCCBFileName, CCObject *pOwner, const CCSize &parentSize);

CCBMemberVariableAssigner* getCCBMemberVariableAssigner();

CCBSelectorResolver* getCCBSelectorResolver();

CCBAnimationManager* getAnimationManager();

void setAnimationManager(CCBAnimationManager *pAnimationManager);

// Used in CCNodeLoader::parseProperties()

std::set<std::string>* getAnimatedProperties();

std::set<std::string>& getLoadedSpriteSheet();

CCObject* getOwner();

/* Utility methods. */

static std::string lastPathComponent(const char* pString);

static std::string deletePathExtension(const char* pString);

static std::string toLowerCase(const char* pCCString);

static bool endsWith(const char* pString, const char* pEnding);

/* Parse methods. */

int readInt(bool pSigned);

unsigned char readByte();

bool readBool();

std::string readUTF8();

float readFloat();

std::string readCachedString();

bool isJSControlled();

bool readCallbackKeyframesForSeq(CCBSequence* seq);

bool readSoundKeyframesForSeq(CCBSequence* seq);

CCArray* getOwnerCallbackNames();

CCArray* getOwnerCallbackNodes();

CCArray* getOwnerOutletNames();

CCArray* getOwnerOutletNodes();

CCArray* getNodesWithAnimationManagers();

CCArray* getAnimationManagersForNodes();

CCDictionary* getAnimationManagers();

void setAnimationManagers(CCDictionary* x);  // weak reference

void addOwnerCallbackName(std::string name);

void addOwnerCallbackNode(CCNode *node);

void addDocumentCallbackName(std::string name);

void addDocumentCallbackNode(CCNode *node);

static float getResolutionScale();

static void setResolutionScale(float scale);

CCNode* readFileWithCleanUp(bool bCleanUp, CCDictionary* am);

void addOwnerOutletName(std::string name);

void addOwnerOutletNode(CCNode *node);

private:

void cleanUpNodeGraph(CCNode *pNode);

bool readSequences();

CCBKeyframe* readKeyframe(int type);

bool readHeader();

bool readStringCache();

//void readStringCacheEntry();

CCNode* readNodeGraph();

CCNode* readNodeGraph(CCNode * pParent);

bool getBit();

void alignBits();

friend class CCNodeLoader;

};

// end of effects group

/// @}

NS_CC_EXT_END

#endif


CCBReader的更多相关文章

  1. 当编译CCBReader时出现 “ CCBAnimationManager.m Use of undeclared identifier 'other‘ ” 解决方法

    第一种解决方法是去github上下载最新的CCBReader 第二种解决方法是把other替换成self.inner 建议用新版本的

  2. ‎CocosBuilder 学习笔记(1) CCBReader 解析.ccbi文件流程

    1. 简介 CocosBuilder是免费开源的Cocos2d UI编辑器. .ccb文件是CCB项目的原始文件. .ccbi文件是CCB项目发布后的生成的二进制文件.CCBReader可以快速通过该 ...

  3. 从零开始のcocos2dx生活(九)CCBReader

    NodeLoaderLibrary是用来存储节点加载器类型的类,通过registerDefaultNodeLoaders()可以注册所有默认类型的加载器 在CocosBuilder的使用手册中: 1. ...

  4. 导出 C/C++ API 给 Lua 使用[转]

    导出 C/C++ API 给 Lua 使用   cocos2d-x 和 quick-cocos2d-x 的底层代码都是使用 C++ 语言开发的.为了使用 Lua 脚本语言进行开发,我们利用 tolua ...

  5. 简单的2d图形变换--仿设变换AffineTransform

    在ios中常常遇到些小的动画效果,比如点击一个按钮后,按钮上的三角形图片就旋转了.这种简单的小动画,常常通过更改view的transform属性来实现.这个transform属性,就是一个仿射变化矩阵 ...

  6. cocosbuilder3.0使用小记

    新项目用到了堪称完美的cocos2d-x2.1.5版本,用cocsbuilder2.1版本出现了返回的最终node为null的问题,看xcode的提示说: cocos2d: WARNING! Inco ...

  7. Cocos2d-x项目移植到WP8小记

    Cocos2d-x项目移植到WP8小记 作者: K.C. 日期: 10/24/2013 Date: 2013-10-24 00:33 Title: Cocos2d-x项目移植到WP8小记 Tags: ...

  8. cocos2d-x (Android)之-那些常见的error记

    转自:http://blog.csdn.net/callchunli/article/details/8929813 (2013/9/2) build.xml:939: java.lang.Array ...

  9. cocosbuilder中使用字体描边时,字符重叠,间距过小问题

    cocosbuilder中使用字体描边时,字符重叠,间距过小问题 cocos2d-x 3.7 v3.7解析cocosbuilder中描边字体的代码如下: void LabelTTFLoader::pa ...

随机推荐

  1. YUV采样及存储格式

    YUV,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值:而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素 ...

  2. 【转载】图论 500题——主要为hdu/poj/zoj

    转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  3. 【Android】以SimpleAdapter做适配器的ListView和GridView

    SimpleAdapter介绍 SimpleAdapter是一个简单的适配器,可以将静态数据映射到XML文件中定义好的视图. 构造函数 public SimpleAdapter (Context co ...

  4. UVA 11600-Masud Rana(状压,概率dp)

    题意: 有n个节点的图,开始有一些边存在,现在每天任意选择两点连一条边(可能已经连过),求使整个图联通的期望天数. 分析: 由于开始图可以看做几个连通分量,想到了以前做的一个题,一个点代表一个集合(这 ...

  5. 【LeetCode 221】Maximal Square

    Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and ret ...

  6. springmvc里面的中文乱码问题

    如果是以get方法提交的表单,则可以在comcat服务器的server.xml文件里面设置 <Connector connectionTimeout="20000" port ...

  7. C++ 为什么要用覆盖(学习笔记)

    长篇大论这里就不说了,举个例子class fruit{public: void func() { printf("fruit\n"); } virtual void vfunc() ...

  8. 8个很有用的PHP安全函数,你知道几个?

    原文:Useful functions to provide secure PHP application 译文:有用的PHP安全函数 译者:dwqs 安 全是编程非常重要的一个方面.在任何一种编程语 ...

  9. 结合Vim ghostscript 将源代码文件转换成语法高亮的pdf格式文档

    step 1: 安装ghostscript (debian 环境, 其他环境自行google) sudo apt-get install ghostscript step 2:  用Vim生成ps文件 ...

  10. HDU5765 Bonds 最小割极

    http://acm.hdu.edu.cn/showproblem.php?pid=5765 题意:无向连通图,问每条边在几个最小割极上 思路:用位压形式,表示边的关系.g[1<<i]=1 ...