本文来自http://blog.csdn.net/runaying ,引用必须注明出处!
cocos2d-x节点(CCPlatformMacros.h)API
温馨提醒:为了大家能更好学习,强烈推荐大家看看本人的这篇博客 Cocos2d-X权威指南笔记
定义一些特定于平台的宏
///cocos2d-x-3.0alpha0/cocos2dx/platform //定义一些特定于平台的宏 #ifndef __CC_PLATFORM_MACROS_H__ #define __CC_PLATFORM_MACROS_H__ /** * 定义一些特定于平台的宏 */ #include "ccConfig.h" #include "CCPlatformConfig.h" #include "CCPlatformDefine.h" /** * 定义了一个创建特定类型函数,例如:Layer * @param \__TYPE__ 要 create() 的类的类型 , 例如: Layer */ #define CREATE_FUNC(__TYPE__) \ static __TYPE__* create() \ { \ __TYPE__ *pRet = new __TYPE__(); \ if (pRet && pRet->init()) \ { \ pRet->autorelease(); \ return pRet; \ } \ else \ { \ delete pRet; \ pRet = NULL; \ return NULL; \ } \ } /** * 为特定的类型,定义一个节点的功能 * @param \__TYPE__ add 到 node() 的 class 类型, 例如: Layeruch as Layer * @过时不再需要建议使用新的 API ,此接口迟早将被弃用。 */ #define NODE_FUNC(__TYPE__) \ CC_DEPRECATED_ATTRIBUTE static __TYPE__* node() \ { \ __TYPE__ *pRet = new __TYPE__(); \ if (pRet && pRet->init()) \ { \ pRet->autorelease(); \ return pRet; \ } \ else \ { \ delete pRet; \ pRet = NULL; \ return NULL; \ } \ } /** @def CC_ENABLE_CACHE_TEXTURE_DATA 启用它,如果你想缓存 texture 数据 不为任何Emscripten 启用 -- 似乎没有必要,不希望 不同于其他平台,除非有一个很好的理由。 It's new in cocos2d-x since v0.99.5 */ #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) #define CC_ENABLE_CACHE_TEXTURE_DATA 1 #else #define CC_ENABLE_CACHE_TEXTURE_DATA 0 #endif #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) || (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) || (CC_TARGET_PLATFORM == CC_PLATFORM_EMSCRIPTEN) /* 使用 glDrawElements功能时,一些Win32的电脑和一些Android设备,应用程序会崩溃 * 在绘制的时候为了避免这种情况,Indices(指数)应该再次被绑定 */ #define CC_REBIND_INDICES_BUFFER 1 #else #define CC_REBIND_INDICES_BUFFER 0 #endif // generic macros //通用宏 // namespace cocos2d {} #ifdef __cplusplus #define NS_CC_BEGIN namespace cocos2d { #define NS_CC_END } #define USING_NS_CC using namespace cocos2d #else #define NS_CC_BEGIN #define NS_CC_END #define USING_NS_CC #endif /** CC_PROPERTY_READONLY 用于声明一个受保护的变量. 我们可以使用 getter 来读取该变量 @param varType 变量类型. @param varName 变量名字. @param funName "get + funName" 将作为 getter 的名字. @warning getter 是一个公共的虚函数,你应该重写它. 在所有的 public CC_PROPERTY_READONLY 后声明 变量和方法。 如果你需要 protected 或 private,请声明 */ #define CC_PROPERTY_READONLY(varType, varName, funName)\ protected: varType varName;\ public: virtual varType get##funName(void) const; #define CC_PROPERTY_READONLY_PASS_BY_REF(varType, varName, funName)\ protected: varType varName;\ public: virtual const varType& get##funName(void) const; /** CC_PROPERTY 用于声明一个受保护的变量。 我们可以使用 getter 来读取该变量, 使用 setter 来读取该变量. @param varType 变量类型. @param varName 变量名. @param funName "get + funName" 将作为 getter 的名字.. "set + funName" 将作为 setter 的名字. @warning getter 、 setter 是公共的虚函数,你应该重写它. 在所有的 public CC_PROPERTY_READONLY 后声明 变量和方法。 如果你需要 protected 或 private,请声明 */ #define CC_PROPERTY(varType, varName, funName)\ protected: varType varName;\ public: virtual varType get##funName(void);\ public: virtual void set##funName(varType var); #define CC_PROPERTY_PASS_BY_REF(varType, varName, funName)\ protected: varType varName;\ public: virtual const varType& get##funName(void) const;\ public: virtual void set##funName(const varType& var); /** CC_SYNTHESIZE_READONLY 用于声明一个受保护的变量. We can use getter to read the variable. @param varType 变量类型. @param varName 变量名. @param funName "get + funName" 将作为 getter 的名字.. @warning 是一个公共的内联函数 在所有的 public CC_PROPERTY_READONLY 后声明 变量和方法。 如果你需要 protected 或 private,请声明 */ #define CC_SYNTHESIZE_READONLY(varType, varName, funName)\ protected: varType varName;\ public: virtual varType get##funName(void) const { return varName; } #define CC_SYNTHESIZE_READONLY_PASS_BY_REF(varType, varName, funName)\ protected: varType varName;\ public: virtual const varType& get##funName(void) const { return varName; } /** CC_SYNTHESIZE 用于声明一个受保护的变量. We can use getter to read the variable, and use the setter to change the variable. @param varType 变量类型. @param varName 变量名. @param funName "get + funName" 将作为 getter 的名字.. "set + funName" 将作为 setter 的名字.. @warning getter 、 setter 是一个公共的内联函数. 在所有的 public CC_PROPERTY_READONLY 后声明 变量和方法。 如果你需要 protected 或 private,请声明 */ #define CC_SYNTHESIZE(varType, varName, funName)\ protected: varType varName;\ public: virtual varType get##funName(void) const { return varName; }\ public: virtual void set##funName(varType var){ varName = var; } #define CC_SYNTHESIZE_PASS_BY_REF(varType, varName, funName)\ protected: varType varName;\ public: virtual const varType& get##funName(void) const { return varName; }\ public: virtual void set##funName(const varType& var){ varName = var; } #define CC_SYNTHESIZE_RETAIN(varType, varName, funName) \ private: varType varName; \ public: virtual varType get##funName(void) const { return varName; } \ public: virtual void set##funName(varType var) \ { \ if (varName != var) \ { \ CC_SAFE_RETAIN(var); \ CC_SAFE_RELEASE(varName); \ varName = var; \ } \ } #define CC_SAFE_DELETE(p) do { delete (p); (p) = nullptr; } while(0) #define CC_SAFE_DELETE_ARRAY(p) do { if(p) { delete[] (p); (p) = nullptr; } } while(0) #define CC_SAFE_FREE(p) do { if(p) { free(p); (p) = nullptr; } } while(0) #define CC_SAFE_RELEASE(p) do { if(p) { (p)->release(); } } while(0) #define CC_SAFE_RELEASE_NULL(p) do { if(p) { (p)->release(); (p) = nullptr; } } while(0) #define CC_SAFE_RETAIN(p) do { if(p) { (p)->retain(); } } while(0) #define CC_BREAK_IF(cond) if(cond) break #define __CCLOGWITHFUNCTION(s, ...) \ log("%s : %s",__FUNCTION__, String::createWithFormat(s, ##__VA_ARGS__)->getCString()) // cocos2d debug #if !defined(COCOS2D_DEBUG) || COCOS2D_DEBUG == 0 #define CCLOG(...) do {} while (0) #define CCLOGINFO(...) do {} while (0) #define CCLOGERROR(...) do {} while (0) #define CCLOGWARN(...) do {} while (0) #elif COCOS2D_DEBUG == 1 #define CCLOG(format, ...) cocos2d::log(format, ##__VA_ARGS__) #define CCLOGERROR(format,...) cocos2d::log(format, ##__VA_ARGS__) #define CCLOGINFO(format,...) do {} while (0) #define CCLOGWARN(...) __CCLOGWITHFUNCTION(__VA_ARGS__) #elif COCOS2D_DEBUG > 1 #define CCLOG(format, ...) cocos2d::log(format, ##__VA_ARGS__) #define CCLOGERROR(format,...) cocos2d::log(format, ##__VA_ARGS__) #define CCLOGINFO(format,...) cocos2d::log(format, ##__VA_ARGS__) #define CCLOGWARN(...) __CCLOGWITHFUNCTION(__VA_ARGS__) #endif // COCOS2D_DEBUG // Lua engine debug #if !defined(COCOS2D_DEBUG) || COCOS2D_DEBUG == 0 || CC_LUA_ENGINE_DEBUG == 0 #define LUALOG(...) #else #define LUALOG(format, ...) cocos2d::log(format, ##__VA_ARGS__) #endif // Lua engine debug #if defined(__GNUC__) && ((__GNUC__ >= 5) || ((__GNUG__ == 4) && (__GNUC_MINOR__ >= 4))) \ || (defined(__clang__) && (__clang_major__ >= 3)) #define CC_DISABLE_COPY(Class) \ private: \ Class(const Class &) = delete; \ Class &operator =(const Class &) = delete; #else #define CC_DISABLE_COPY(Class) \ private: \ Class(const Class &); \ Class &operator =(const Class &); #endif /* * 只有特定的编译器支持 __attribute__((deprecated)) */ #if defined(__GNUC__) && ((__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1))) #define CC_DEPRECATED_ATTRIBUTE __attribute__((deprecated)) #elif _MSC_VER >= 1400 //vs 2005 or higher #define CC_DEPRECATED_ATTRIBUTE __declspec(deprecated) #else #define CC_DEPRECATED_ATTRIBUTE #endif /* * 只有特定的编译器支持 __attribute__((format)) * formatPos - 1-based (基于)位置的格式字符串参数 * argPos - 1-based (基于)位置的第一格式依赖参数 */ #if defined(__GNUC__) && (__GNUC__ >= 4) #define CC_FORMAT_PRINTF(formatPos, argPos) __attribute__((__format__(printf, formatPos, argPos))) #elif defined(__has_attribute) #if __has_attribute(format) #define CC_FORMAT_PRINTF(formatPos, argPos) __attribute__((__format__(printf, formatPos, argPos))) #endif // __has_attribute(format) #else #define CC_FORMAT_PRINTF(formatPos, argPos) #endif #if defined(_MSC_VER) #define CC_FORMAT_PRINTF_SIZE_T "%08lX" #else #define CC_FORMAT_PRINTF_SIZE_T "%08zX" #endif #ifdef __GNUC__ #define CC_UNUSED __attribute__ ((unused)) #else #define CC_UNUSED #endif // // CC_REQUIRES_NULL_TERMINATION // #if !defined(CC_REQUIRES_NULL_TERMINATION) #if defined(__APPLE_CC__) && (__APPLE_CC__ >= 5549) #define CC_REQUIRES_NULL_TERMINATION __attribute__((sentinel(0,1))) #elif defined(__GNUC__) #define CC_REQUIRES_NULL_TERMINATION __attribute__((sentinel)) #else #define CC_REQUIRES_NULL_TERMINATION #endif #endif #endif // __CC_PLATFORM_MACROS_H__