CCBReader
#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的更多相关文章
- 当编译CCBReader时出现 “ CCBAnimationManager.m Use of undeclared identifier 'other‘ ” 解决方法
第一种解决方法是去github上下载最新的CCBReader 第二种解决方法是把other替换成self.inner 建议用新版本的
- CocosBuilder 学习笔记(1) CCBReader 解析.ccbi文件流程
1. 简介 CocosBuilder是免费开源的Cocos2d UI编辑器. .ccb文件是CCB项目的原始文件. .ccbi文件是CCB项目发布后的生成的二进制文件.CCBReader可以快速通过该 ...
- 从零开始のcocos2dx生活(九)CCBReader
NodeLoaderLibrary是用来存储节点加载器类型的类,通过registerDefaultNodeLoaders()可以注册所有默认类型的加载器 在CocosBuilder的使用手册中: 1. ...
- 导出 C/C++ API 给 Lua 使用[转]
导出 C/C++ API 给 Lua 使用 cocos2d-x 和 quick-cocos2d-x 的底层代码都是使用 C++ 语言开发的.为了使用 Lua 脚本语言进行开发,我们利用 tolua ...
- 简单的2d图形变换--仿设变换AffineTransform
在ios中常常遇到些小的动画效果,比如点击一个按钮后,按钮上的三角形图片就旋转了.这种简单的小动画,常常通过更改view的transform属性来实现.这个transform属性,就是一个仿射变化矩阵 ...
- cocosbuilder3.0使用小记
新项目用到了堪称完美的cocos2d-x2.1.5版本,用cocsbuilder2.1版本出现了返回的最终node为null的问题,看xcode的提示说: cocos2d: WARNING! Inco ...
- Cocos2d-x项目移植到WP8小记
Cocos2d-x项目移植到WP8小记 作者: K.C. 日期: 10/24/2013 Date: 2013-10-24 00:33 Title: Cocos2d-x项目移植到WP8小记 Tags: ...
- cocos2d-x (Android)之-那些常见的error记
转自:http://blog.csdn.net/callchunli/article/details/8929813 (2013/9/2) build.xml:939: java.lang.Array ...
- cocosbuilder中使用字体描边时,字符重叠,间距过小问题
cocosbuilder中使用字体描边时,字符重叠,间距过小问题 cocos2d-x 3.7 v3.7解析cocosbuilder中描边字体的代码如下: void LabelTTFLoader::pa ...
随机推荐
- getDeclaredMethods()和getMethods()区别
getDeclaredMethods() 返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共.保护.默认(包)访问和私有方法, ...
- vim简单使用教程
vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的.下面的文章翻译自<Learn Vim Progress ...
- java web 学习五(servlet开发1)
一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...
- Java SE 6 新特性: 对脚本语言的支持
2006 年底,Sun 公司发布了 Java Standard Edition 6(Java SE 6)的最终正式版,代号 Mustang(野马).跟 Tiger(Java SE 5)相比,Musta ...
- HDU 3695-Computer Virus on Planet Pandora(ac自动机)
题意: 给一个母串和多个模式串,求模式串在母串后翻转后的母串出现次数的的总和. 分析: 模板题 /*#include <cstdio> #include <cstring> # ...
- window.parent 判断是否是被嵌入iframe里面
项目中有个这样逻辑:B页面嵌套A页面 如图下: 但是B页面有可能独立出来.所以判断B页面是否被嵌入进去则使用 window.parent==window 如果是true B页面是独立的,false B ...
- 搜狐云景paas平台实践之路
前言: 搜狐云景作为搜狐的paas平台,在2014年5月22日的云计算大会上正式发布了公测.初测,注册用户必须先申请邀请码参与公测会赠送用户100元电子券,经过实名认证之后会再赠送100电子券,目测可 ...
- PyBayes的安装和使用
PyBayes 主页 文档 PyBayes is an object-oriented Python library for recursive Bayesian estimation (Bayesi ...
- web.py网页模板中使用jquery
由于$是web.py针对模板的保留字符,所以在模板文件内不能直接使用$("#id")的格式. 解决办法: 1.$$("#id")可以避免$被误解析 2.jque ...
- HDU-4720 Naive and Silly Muggles 圆的外心
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4720 先两两点之间枚举,如果不能找的最小的圆,那么求外心即可.. //STATUS:C++_AC_0M ...