cocos2dx 自定义按钮封装(支持CCMenu批量管理),很久以前的代码
2014-07-28 11:02
507 查看
/* * @note :自定义按钮封装(支持CCMenu批量管理) * @author :Andy.Ro * @email :Qwuloo@qq.com */ #ifndef _XBUTTON_H_INCLUDE_ #define _XBUTTON_H_INCLUDE_ #include "cocos2d.h" #include <iostream> class xButton; class xButtonTouchDelegate; //------------------------------------------------------------------------ // xButtonMenu //------------------------------------------------------------------------ class xButtonMenu : public cocos2d::CCObject { protected: xButtonMenu(xButtonTouchDelegate* sender); public: // @note:实例化 static xButtonMenu* create(xButtonTouchDelegate* sender); // @note:添加按钮 bool addButton( char const* normal ,char const* selected ,char const* disabled ,unsigned nID = 0); // @note:添加按钮 bool addButton( cocos2d::CCSprite* const& normal ,cocos2d::CCSprite* const& selected ,cocos2d::CCSprite* const& disabled ,unsigned nID = 0); // @note:关联各按钮到菜单并返回 cocos2d::CCMenu* toButtonMenu(void); protected: // @note:初始化 bool initButtonArray(void); // @note:触碰事件 void onTouch(cocos2d::CCObject* sender); // @note:设置代理 void setDelegate(xButtonTouchDelegate* sender); protected: //@note:按钮组 cocos2d::CCArray* buttonArray; //@note:触碰代理 xButtonTouchDelegate* target; public: virtual ~xButtonMenu(void); }; //------------------------------------------------------------------------ // xButton //------------------------------------------------------------------------ class xButton : public cocos2d::CCMenuItemImage { friend class xButtonMenu; protected: xButton(unsigned nID); static xButton* create( unsigned nID ,char const* normal ,char const* selected ,char const* disabled ,cocos2d::CCObject* target ,cocos2d::SEL_MenuHandler selector); static xButton* create( unsigned nID ,cocos2d::CCSprite* const& normal ,cocos2d::CCSprite* const& selected ,cocos2d::CCSprite* const& disabled ,cocos2d::CCObject* target ,cocos2d::SEL_MenuHandler selector); bool initWithImages( char const* normal ,char const* selected ,char const* disabled ,cocos2d::CCObject* target ,cocos2d::SEL_MenuHandler selector); bool initWithImages( cocos2d::CCSprite* const& normal ,cocos2d::CCSprite* const& selected ,cocos2d::CCSprite* const& disabled ,cocos2d::CCObject* target ,cocos2d::SEL_MenuHandler selector); protected: // @note:触碰事件 virtual void onTouch(xButtonTouchDelegate* sender); public: // @note:返回控件ID unsigned ctrlID(void); private: // 控件ID unsigned m_nID; public: virtual ~xButton(void); }; //------------------------------------------------------------------------ // xButtonTouchDelegate //------------------------------------------------------------------------ class xButtonTouchDelegate { public: virtual void onTouch(cocos2d::CCObject* sender) = 0; }; #endif // _XBUTTON_H_INCLUDE_
/* * @note :自定义按钮封装(支持CCMenu批量管理) * @author :Andy.Ro * @email :Qwuloo@qq.com */ #include "xButton.h" #include <iostream> using namespace std; USING_NS_CC; //------------------------------------------------------------------------ // xButtonMenu //------------------------------------------------------------------------ xButtonMenu::xButtonMenu(xButtonTouchDelegate* sender) :buttonArray(NULL) ,target(sender) { } xButtonMenu* xButtonMenu::create(xButtonTouchDelegate* sender) { xButtonMenu* s = new xButtonMenu(sender); if ( s && s->initButtonArray() ) { s->autorelease(); } else CC_SAFE_DELETE( s ); return s; } void xButtonMenu::setDelegate(xButtonTouchDelegate* sender) { CC_ASSERT( sender ); this->target = sender; } bool xButtonMenu::initButtonArray(void) { CC_SAFE_RELEASE_NULL( this->buttonArray ); this->buttonArray = CCArray::create(); CC_ASSERT( this->buttonArray ); CC_SAFE_RETAIN( this->buttonArray ); return true; } bool xButtonMenu::addButton( char const* normal ,char const* selected ,char const* disabled ,unsigned nID) { CC_ASSERT( this->buttonArray ); xButton* s = xButton::create( nID ,normal ,selected ,disabled ,this // 触发当前类onTouch调用 ,menu_selector(xButtonMenu::onTouch)); CC_ASSERT( s ); CC_SAFE_RETAIN( s ); this->buttonArray->addObject( s ); CC_SAFE_RELEASE( s ); return true; } bool xButtonMenu::addButton( cocos2d::CCSprite* const& normal ,cocos2d::CCSprite* const& selected ,cocos2d::CCSprite* const& disabled ,unsigned nID) { CC_ASSERT( this->buttonArray ); xButton* s = xButton::create( nID ,normal ,selected ,disabled ,this // 触发当前类onTouch调用 ,menu_selector(xButtonMenu::onTouch)); CC_ASSERT( s ); CC_SAFE_RETAIN( s ); this->buttonArray->addObject( s ); CC_SAFE_RELEASE( s ); return true; } //@brief 通过菜单项创建按钮菜单 CCMenu* xButtonMenu::toButtonMenu(void) { CC_ASSERT( this->buttonArray ); return CCMenu::createWithArray( this->buttonArray ); } void xButtonMenu::onTouch(cocos2d::CCObject* sender) { // cout<< "Call xButtonMenu::onTouch()"<<endl; CC_ASSERT( sender ); CC_ASSERT( dynamic_cast<xButton*>(sender) ); CC_ASSERT( this->target ); // 获取按钮对象 xButton* button = dynamic_cast<xButton*>(sender); // 触发代理onTouch调用 this->target->onTouch(button); // 触发按钮onTouch调用 button->onTouch(this->target); } xButtonMenu::~xButtonMenu(void) { CC_SAFE_RELEASE_NULL( this->buttonArray ); } // class xButtonMenu //------------------------------------------------------------------------ // xButton //------------------------------------------------------------------------ xButton::xButton(unsigned nID) :m_nID(nID) { } xButton* xButton::create( unsigned nID ,char const* normal ,char const* selected ,char const* disabled ,cocos2d::CCObject* target ,cocos2d::SEL_MenuHandler selector) { xButton* s = new xButton(nID); if ( s && s->initWithImages( normal ,selected ,disabled ,target ,selector) ) { s->autorelease(); } else CC_SAFE_DELETE( s ); return s; } xButton* xButton::create( unsigned nID ,cocos2d::CCSprite* const& normal ,cocos2d::CCSprite* const& selected ,cocos2d::CCSprite* const& disabled ,cocos2d::CCObject* target ,cocos2d::SEL_MenuHandler selector) { xButton* s = new xButton(nID); if ( s && s->initWithImages( normal ,selected ,disabled ,target ,selector) ) { s->autorelease(); } else CC_SAFE_DELETE( s ); return s; } bool xButton::initWithImages( char const* normal ,char const* selected ,char const* disabled ,cocos2d::CCObject* target ,cocos2d::SEL_MenuHandler selector) { if ( !this->initWithNormalImage( normal ,selected ,disabled ,target ,selector) ) { return false; } return true; } bool xButton::initWithImages( cocos2d::CCSprite* const& normal ,cocos2d::CCSprite* const& selected ,cocos2d::CCSprite* const& disabled ,cocos2d::CCObject* target ,cocos2d::SEL_MenuHandler selector) { if ( !this->initWithNormalSprite( normal ,selected ,disabled ,target ,selector) ) { return false; } return true; } void xButton::onTouch(xButtonTouchDelegate* sender) { // cout<< "Call xButton::onTouch()"<<endl; } // @brief 返回控件ID unsigned xButton::ctrlID(void) { return this->m_nID; } xButton::~xButton(void) { } // class xButton
相关文章推荐
- cocos2dx 基础触碰效果封装(通用于具有触碰效果的节点或精灵,类似按钮,方便扩展),很久以前的代码
- [已封装] DIV拖动类 支持在FF下拖动,调用简单 主要代码都有注释 适合初学者学习
- Control Study -> 自定义DataGrid翻页按钮(示例代码下载)
- android之自定义ViewGroup和自动换行的布局的实现(支持按钮间隔)
- 【COCOS2D-X(1.X 2.X) Json(cpp版)及新加字体库篇】在Cocos2dx引擎中封装、解析Json(cpp版)数据以及添加自定义字体库
- 自定义ajax支持跨域组件封装
- Control Study -> 自定义DataGrid翻页按钮(示例代码下载)
- Android ImageButton自定义按钮的按下效果的代码实现方法分享
- Android中ImageButton自定义按钮的按下效果的代码实现方法
- Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法
- Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法。
- moo弹出框 改进版 css外置 背景用图片 大小任意缩放 圆角 插入任意内容 自定义按钮 回车空格esc支持 滚动支持 动画开关
- ADO.NET分页封装[支持多表连接查询分页]-代码实现-关键代码下载
- Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法。
- Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法。
- Control Study -> 自定义DataGrid翻页按钮(示例代码下载)
- Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法
- 转载 :Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法。
- Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法。
- Android ImageButton自定义按钮的按下效果的代码实现方法