现在的位置: 首页 > 综合 > 正文

cocos2d-x节点(CCPlatformMacros.h)API

2014年01月14日 ⁄ 综合 ⁄ 共 7306字 ⁄ 字号 评论关闭

本文来自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__

抱歉!评论已关闭.