CCObject.h

来源:互联网 发布:p图 淘宝刷手 编辑:程序博客网 时间:2024/06/04 19:35

流程控制(flow control): 非常容易管理不同场景之间的流程控制。
精灵(sprite):快速而方便的精灵用于显示一切可见的元素。
节点(node):基于树结构的分层组织方式,方便管理不同层次的游戏元素,同时提供了统一管理的计时器(scheduler)。
动作(action):应用于精灵或其他游戏元素的动画效果,可以组合成复杂的动作。
特效(effect):包括波浪(wave) 旋转(twirl)和透镜(lens)等视觉特效。
平面地图(tiled map):支持矩形和六边形的平面地图。
菜单(menu):创建游戏中常见的菜单。
用户输入:提供接受用户触摸事件 传感器等输入的简单解决方案。
文档(document):编程指南 api参考 视频教学以及很多简单可靠的测试样例。
MIT许可:免费开放的协议。
基于OpenGL:深度优化的绘图方式,支持硬件加速。


#ifndef __CCOBJECT_H__

#define __CCOBJECT_H__


#include "platform/CCPlatformMacros.h"


NS_CC_BEGIN


/**
 * @addtogroup base_nodes
 * @{
 */


class CCZone;
class CCObject;
class CCNode;
class CCEvent;


class CC_DLL CCCopying
{
public:
    virtual CCObject* copyWithZone(CCZone* pZone);
};


class CC_DLL CCObject : public CCCopying
{
public:
    // object id, CCScriptSupport need public m_uID
// 对象id 在脚本引擎中使用
    unsigned int        m_uID;
    // Lua reference id
    int                 m_nLuaID;
protected:
    // count of references
// 引用数量
    unsigned int        m_uReference;
    // is the object autoreleased
// 标识此对象是否已经设置 autoreleased
    bool        m_bManaged;        
public:
    CCObject(void);
    virtual ~CCObject(void);
    // 释放该对象的引用权
    void release(void);
// 获取该对象的引用权
    void retain(void);
// 把对象放入自动回收池(CCAutoreleasePool) 当回收池自身释放的时候,它会对池中的所有对象执行一次 release()方法,实现灵活的垃圾回收。
// 回收池可以手动创建和释放。除此之外,引擎在每次游戏循环开始之前也会创建一个回收池,在循环结束后释放回收池。
// 因此,即使我们没有手动创建和释放回收池,每一帧结束的时候,自动回收池中的对象也都会执行一下release()方法。
    CCObject* autorelease(void);
    CCObject* copy(void);
    bool isSingleReference(void);
// 获得对象当前的引用计数值
    unsigned int retainCount(void);
    virtual bool isEqual(const CCObject* pObject);


    virtual void update(float dt) {CC_UNUSED_PARAM(dt);};
    
    friend class CCAutoreleasePool;
};




typedef void (CCObject::*SEL_SCHEDULE)(float);
typedef void (CCObject::*SEL_CallFunc)();
typedef void (CCObject::*SEL_CallFuncN)(CCNode*);
typedef void (CCObject::*SEL_CallFuncND)(CCNode*, void*);
typedef void (CCObject::*SEL_CallFuncO)(CCObject*);
typedef void (CCObject::*SEL_MenuHandler)(CCObject*);
typedef void (CCObject::*SEL_EventHandler)(CCEvent*);
typedef int (CCObject::*SEL_Compare)(CCObject*);


#define schedule_selector(_SELECTOR) (SEL_SCHEDULE)(&_SELECTOR)
#define callfunc_selector(_SELECTOR) (SEL_CallFunc)(&_SELECTOR)
#define callfuncN_selector(_SELECTOR) (SEL_CallFuncN)(&_SELECTOR)
#define callfuncND_selector(_SELECTOR) (SEL_CallFuncND)(&_SELECTOR)
#define callfuncO_selector(_SELECTOR) (SEL_CallFuncO)(&_SELECTOR)
#define menu_selector(_SELECTOR) (SEL_MenuHandler)(&_SELECTOR)
#define event_selector(_SELECTOR) (SEL_EventHandler)(&_SELECTOR)
#define compare_selector(_SELECTOR) (SEL_Compare)(&_SELECTOR)


// end of base_nodes group
/// @}


NS_CC_END


#endif // __CCOBJECT_H__
原创粉丝点击