Cocos2d-x结构学习十CCMenu、CCLayerRGBA、CREATE_FUNC、CCMenuItem、tCCMenuState

1、Ccmenu:菜单类,继承自cclayerRGBA

class CC_DLL Ccmenu : public cclayerRGBA
{
    bool m_bEnabled;                  //标记菜单是否接收事件
    
public:
    Ccmenu() : m_pSelectedItem(NULL) {}
    virtual ~Ccmenu(){}

    static Ccmenu* create();                                //几个创建菜单函数
    static Ccmenu* create(CcmenuItem* item,...);
    static Ccmenu* createWithArray(CCArray* pArrayOfItems);
    static Ccmenu* createWithItem(CcmenuItem* item);
    static Ccmenu* createWithItems(CcmenuItem *firstItem,va_list args);

    bool init();                                      //初始化相关函数
    bool initWithArray(CCArray* pArrayOfItems);

    void alignItemsverticallyWithPadding(float padding);                //下面是和菜单对齐相关的一组函数
    void alignItemsHorizontally();
    void alignItemsHorizontallyWithPadding(float padding);
    void alignItemsInColumns(unsigned int columns,...);
    void alignItemsInColumns(unsigned int columns,va_list args);
    void alignItemsInColumnsWithArray(CCArray* rows);
    void alignItemsInRows(unsigned int rows,...);
    void alignItemsInRows(unsigned int rows,va_list args);
    void alignItemsInRowsWithArray(CCArray* columns);

    void setHandlerPriority(int newPriority);        //设置处理的优先级

    virtual void addChild(CCNode * child);                                  //孩子节点处理相关函数
    virtual void addChild(CCNode * child,int zOrder);
    virtual void addChild(CCNode * child,int zOrder,int tag);
    virtual void registerWithTouchdispatcher();
    virtual void removeChild(CCNode* child,bool cleanup);

    virtual bool ccTouchBegan(CCTouch* touch,CCEvent* event);                 //触摸处理相关函数
    virtual void ccTouchEnded(CCTouch* touch,CCEvent* event);
    virtual void ccTouchCancelled(CCTouch *touch,CCEvent* event);
    virtual void ccTouchMoved(CCTouch* touch,CCEvent* event);

    virtual void onExit();                  //退出

    virtual void setopacityModifyRGB(bool bValue) {CC_UNUSED_ParaM(bValue);}
    virtual bool isOpacityModifyRGB(void) { return false;}
    
    virtual bool isEnabled() { return m_bEnabled; }                         //判断和设置是否混合
    virtual void setEnabled(bool value) { m_bEnabled = value; };
protected:
    CcmenuItem* itemForTouch(CCTouch * touch);
    tCcmenuState m_eState;
    CcmenuItem *m_pSelectedItem;
};
2、cclayerRGBA:继承自cclayer和CCRGBAProtocol,颜色相关类
class CC_DLL cclayerRGBA : public cclayer,public CCRGBAProtocol
{
public:
    CREATE_FUNC(cclayerRGBA);
    cclayerRGBA();
    virtual ~cclayerRGBA();
    virtual bool init();
    
    virtual glubyte getopacity();
    virtual glubyte getdisplayedOpacity();
    virtual void setopacity(glubyte opacity);
    virtual void updatedisplayedOpacity(glubyte parentOpacity);
    virtual bool isCascadeOpacityEnabled();
    virtual void setCascadeOpacityEnabled(bool cascadeOpacityEnabled);
    
    virtual const ccColor3B& getColor();
    virtual const ccColor3B& getdisplayedColor();
    virtual void setColor(const ccColor3B& color);
    virtual void updatedisplayedColor(const ccColor3B& parentColor);
    virtual bool isCascadeColorEnabled();
    virtual void setCascadeColorEnabled(bool cascadeColorEnabled);
    
    virtual void setopacityModifyRGB(bool bValue) {CC_UNUSED_ParaM(bValue);}
    virtual bool isOpacityModifyRGB() { return false; }
protected:
	glubyte		_displayedOpacity,_realOpacity;
	ccColor3B	_displayedColor,_realColor;
	bool		_cascadeOpacityEnabled,_cascadeColorEnabled;
};
3、CREATE_FUNC:定义一个创建函数的宏,使编写更简便
#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; \
    } \
}
4、CcmenuItem:菜单项,继承自CCNodeRGBA
class CC_DLL CcmenuItem : public CCNodeRGBA
{
protected:
    bool m_bSelected;              //是否被选中
    bool m_bEnabled;

public:
    CcmenuItem()
    : m_bSelected(false),m_bEnabled(false),m_pListener(NULL),m_pfnSelector(NULL),m_nScriptTapHandler(0)
    {}
    virtual ~CcmenuItem();

    static CcmenuItem* create();
    bool initWithTarget(CCObject *rec,SEL_MenuHandler selector);
    CCRect rect();
    virtual void activate();

    virtual void selected();            //选中
    virtual void unselected();         //取消选中
    
    virtual void registerScriptTapHandler(int nHandler);          //脚本处理例程相关
    virtual void unregisterScriptTapHandler(void);
    int getScriptTapHandler() { return m_nScriptTapHandler; };

    virtual bool isEnabled();                   //启用和选择相关
    virtual void setEnabled(bool value);
    virtual bool isSelected();      
    
    void setTarget(CCObject *rec,SEL_MenuHandler selector);   //设置回调函数
protected:
    CCObject*       m_pListener;
    SEL_MenuHandler    m_pfnSelector;
    int             m_nScriptTapHandler;
};
4、tCcmenuState:菜单状态
typedef enum  
{
    kCcmenuStateWaiting,kCcmenuStateTrackingTouch
} tCcmenuState;

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...