#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. MySQL基础之第6章 创建、修改和删除表 .

    6.1.创建表 6.1.1.创建表的语法形式 CREATE TABLE 表名 ( 属性名 数据类型 [完整性约束条件],属性名 数据类型 [完整性约束条件],...... 属性名 数据类型); 完整性 ...

  2. MySQL row模式binlog复制原理

    http://www.360doc.com/content/14/1107/14/12904276_423333021.shtml

  3. hdu 2059(dp)

    题意:容易理解... 思路:dp[i]表示乌龟到达第i个充电站时最少花费时间到第 i 个充电站后,从起点开始遍历到第 i-1 个充电站,得到最少花费时间 状态转移方程:dp[i]=min(dp[j]+ ...

  4. Flash Player”又来了“!

    2012年,Adobe宣布缩小对Linux平台的支持,自Flash Player 11.2版本之后,只为Linux平台上的Flash Player提供安全更新和bug修复,而不再提供版本更新. 四年之 ...

  5. [Everyday Mathematics]20150207

    求极限 $$\bex \lim_{x\to+\infty}\sex{\sqrt{x+\sqrt{x+\sqrt{x^\al}}}-\sqrt{x}},\quad\sex{0<\al<2}. ...

  6. webdriver(python)学习笔记七——多层框架定位与智能等待

    多层框架或窗口定位: switch_to_frame() switch_to_window() 智能等待: implicitly_wait() 现在web应用中经常会遇到框架如(frame)或窗口(w ...

  7. HDU 5750 Dertouzos 简单数学

    感悟:这又是zimpha巨出的一场题,然后04成功fst(也就是这题) 实际上还是too young,要努力增加姿势, 分析:直接枚举这些数不好枚举,换一个角度,枚举x*d,也就是d的另一个乘数是多少 ...

  8. C++虚函数表原理

    C++中的虚函数的作用主要是实现了多态的机制.关于多态,简而言之就是用父类型别的指针指 向其子类的实例,然后通过父类的指针调用实际子类的成员函数.这种技术可以让父类的指针有“多种形态”,这是一种泛型技 ...

  9. Ubuntu中使用pyUSB读取鼠标或键盘的数据程序

    参考 :http://www.orangecoat.com/how-to/read-and-decode-data-from-your-mouse-using-this-pyusb-hack 要注意的 ...

  10. HDU5634 Rikka with Phi 线段树

    // HDU5634 Rikka with Phi 线段树 // 思路:操作1的时候,判断一下当前区间是不是每个数都相等,在每个数相等的区间上操作.相当于lazy,不必更新到底. #include & ...