#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. strcpy函数和strncpy函数的区别

    strcpy函数和strncpy函数的原型介绍在我的另一篇文章中介绍了,见strcpy,strncpy,strlen等函数原型 strcpy:字串复制 原型:char *strcpy(char *de ...

  2. mapreduce优化总结

    集群的优化 1.合理分配map和reduce任务的数量(单个节点上map任务.reduce任务的最大数量) 2.其他配置 io.file.buffer.size hadoop访问文件的IO操作都需要通 ...

  3. 浅谈JavaScript中的原型模式

    在JavaScript中创建对象由很多种方式,如工厂模式.构造函数模式.原型模式等: <pre name="code" class="html">/ ...

  4. C语言的代码内存布局

    由以下3个部分组成: 1)BSS 段 BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS ...

  5. makefile、gdb使用记录

    makefile的模板 all: rover server station rover: rover.c tcputil.o gcc rover.c tcputil.o -o rover -lpthr ...

  6. MYSQL event_scheduler

    一.概述  事件调度器是在 MySQL 5.1 中新增的另一个特色功能,可以作为定时任务调度器,取代部分原先只能用操作系统任务调度器才能完成的定时功>能.例如,Linux 中的 crontabe ...

  7. work_7

    1. 理解C++变量的作用域和生命周期 a) 用少于10行代码演示你对局部变量的生命周期的理解 局部变量分为动态局部变量和静态局部变量,其共同点为作用域均为定义它的函数体或语句块,其不同点为其生命周期 ...

  8. Android问题-新电脑新系统WIN764位上安装简版本的XE8提示“Unit not found: 'System'”

    问题现象:电脑太慢,重安新系统,所以要安DELPHIXE8,但安装过程中出现二次杀软件提示,我都选的是通过.但是XE8过程到最后的"Create AVD"时出现一个错误(具体是什么 ...

  9. BPL插件框架的二种实现

    1)非RTTI方式适用于所有的DELPHI版本 unit untMain; interface uses Windows, Messages, SysUtils, Classes, Graphics, ...

  10. 对于一个网站,如何禁止直接从浏览器Web browser中访问js文件

    比如有一个网站,https://testsystem.infotest.com 在这个网站的内容文件目录下面,有一个scripts文件夹,该文件夹中有一个js文件,比如lukeTest.js文件 这样 ...