#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. logback.xml_appender配置

    logback<appender> <appender>: <appender>是<configuration>的子节点,是负责写日志的组件. < ...

  2. Spring 事务管理原理探究

    此处先粘贴出Spring事务需要的配置内容: 1.Spring事务管理器的配置文件: 2.一个普通的JPA框架(此处是mybatis)的配置文件: <bean id="sqlSessi ...

  3. WebView介绍

    本文主要对WebView进行介绍,包括webView 4个可以定制的点.设置WebView back键响应.控制网页的链接仍在webView中跳转.显示页面加载进度.处理https请求.利用addJa ...

  4. 《Python 学习手册4th》 第十四章 迭代器和解析

    ''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书) “重点 ...

  5. 在虚拟机中安装windows

    前言: 本来在windows当中安装windows是一件很简单的事,但是在使用光盘进行安装的时候,发现无法进行安装. 思路: 将光盘进行提取成iso文件,一个光盘提取一个iso文件,从而存在两个iso ...

  6. Linux服务器下没有root权限装Matlab R2013a

    Matlab R2013a Unix版下载地址 注意:由于我是在单位的集群系统上装Matlab,没有root权限,故下载下来的.iso文件不能在linux下用mount命令挂载,故先在Win下解压,再 ...

  7. 树莓派使用8188eu无线网卡

    #已经集成了8188eu驱动的镜像 http://cassidy.pi3g.com/rpi_images/raspbian-wifi-fix130523.7z #需要修改的信息 sudo nano / ...

  8. 【Hadoop代码笔记】Hadoop作业提交之JobTracker接收作业提交

    一.概要描述 在上一篇博文中主要描述了JobTracker接收作业的几个服务(或功能)模块的初始化过程.本节将介绍这些服务(或功能)是如何接收到提交的job.本来作业的初始化也可以在本节内描述,但是涉 ...

  9. HDU 5776 sum (模拟)

    sum 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5776 Description Given a sequence, you're asked ...

  10. HDU 5775 Bubble Sort (线段树)

    Bubble Sort 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5775 Description P is a permutation of t ...