- #ifndef __SceneHello__CCRadioMenu__
- #define __SceneHello__CCRadioMenu__
- #include "cocos2d.h"
- class CCRadioMenu : public cocos2d::CCMenu{
- public:
- CCRadioMenu():cocos2d::CCMenu(){}
- cocos2d::CCMenuItem *_curHighlighted;
- virtual bool ccTouchBegan(cocos2d::CCTouch *pTouch,cocos2d::CCEvent *pEvent);
- virtual void ccTouchEnded(cocos2d::CCTouch *pTouch,cocos2d::CCEvent *pEvent);
- virtual void ccTouchCancelled(cocos2d::CCTouch *pTouch,cocos2d::CCEvent *pEvent);
- virtual void ccTouchMoved(cocos2d::CCTouch *pTouch,cocos2d::CCEvent *pEvent);
- void setSelectedItem_(cocos2d::CCMenuItem *item);
- static CCRadioMenu* create(cocos2d::CCMenuItem* item,...);
- };
- #endif /* defined(__SceneHello__CCRadioMenu__) */
用法:
- #include "CCRadioMenu.h"
- using namespace cocos2d;
- CCRadioMenu *CCRadioMenu::create(CCMenuItem *item,...){
- va_list args;
- va_start(args,item);
- CCRadioMenu *pRet = new CCRadioMenu();
- CCArray* pArray = NULL;
- if( item )
- {
- pArray = CCArray::create(item,NULL);
- CCMenuItem *i = va_arg(args,CCMenuItem*);
- while(i)
- {
- pArray->addObject(i);
- i = va_arg(args,CCMenuItem*);
- }
- }
- if (pRet && pRet->initWithArray(pArray))
- {
- pRet->autorelease();
- va_end(args);
- return pRet;
- }
- va_end(args);
- CC_SAFE_DELETE(pRet);
- return NULL;
- }
- void CCRadioMenu::setSelectedItem_(CCMenuItem *item){
- m_pSelectedItem = NULL;
- m_pSelectedItem = item;
- }
- bool CCRadioMenu::ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent){
- if (m_eState != kCCMenuStateWaiting) return false;
- CCMenuItem *curSelection = this->itemForTouch(pTouch);
- if (curSelection) {
- curSelection->selected();
- _curHighlighted = curSelection;
- if (_curHighlighted) {
- if (m_pSelectedItem != curSelection) {
- m_pSelectedItem->unselected();
- }
- m_eState = kCCMenuStateTrackingTouch;
- return true;
- }
- }
- return false;
- }
- void CCRadioMenu::ccTouchEnded(CCTouch *pTouch,CCEvent *pEvent){
- CCAssert(m_eState == kCCMenuStateTrackingTouch,"[Menu ccTouchEnded] -- invalid state");
- CCMenuItem *curSelection = this->itemForTouch(pTouch);
- if (curSelection != _curHighlighted && curSelection != NULL) {
- m_pSelectedItem->selected();
- _curHighlighted->unselected();
- _curHighlighted = NULL;
- m_eState = kCCMenuStateWaiting;
- return;
- }
- m_pSelectedItem = _curHighlighted;
- _curHighlighted->activate();
- _curHighlighted = NULL;
- m_eState = kCCMenuStateWaiting;
- }
- void CCRadioMenu::ccTouchCancelled(CCTouch *pTouch,CCEvent *pEvent){
- CCAssert(m_eState == kCCMenuStateTrackingTouch,"[Menu ccTouchCancelled] -- invalid state");
- m_pSelectedItem->selected();
- _curHighlighted->unselected();
- _curHighlighted = NULL;
- m_eState = kCCMenuStateWaiting;
- }
- void CCRadioMenu::ccTouchMoved(CCTouch *pTouch,"[Menu ccTouchMoved] -- invalid state");
- CCMenuItem *curSelection = this->itemForTouch(pTouch);
- if (curSelection != _curHighlighted && curSelection != NULL) {
- _curHighlighted->unselected();
- curSelection->selected();
- _curHighlighted = curSelection;
- return;
- }
- }
- CCMenuItemImage *menuItem_man = CCMenuItemImage::create(
- "jsman_nor.png","jsman_pre.png",this,menu_selector(HelloWorld::selectMan));
- menuItem_man->setPosition(ccp(size.width*0.3f,size.height*0.66f));
- CCMenuItemImage *menuItem_man2 = CCMenuItemImage::create(
- "jsman_nor.png",menu_selector(HelloWorld::selectMan));
- menuItem_man2->setPosition(ccp(size.width*0.3f,size.height*0.3f));
- CCMenuItemImage *menuItem_woman = CCMenuItemImage::create(
- "jswoman_nor.png","jswoman_pre.png",menu_selector(HelloWorld::selectWomen));
- menuItem_woman->setPosition(ccp(size.width*0.7f,size.height*0.66f));
- CCMenuItemImage *menuItem_woman2 = CCMenuItemImage::create(
- "jswoman_nor.png",menu_selector(HelloWorld::selectWomen));
- menuItem_woman2->setPosition(ccp(size.width*0.7f,size.height*0.3f));
- CCRadioMenu *radioMenu = CCRadioMenu::create(menuItem_man,menuItem_man2,menuItem_woman,menuItem_woman2,NULL);
- radioMenu->setSelectedItem_(menuItem_man);
- menuItem_man->selected();
- radioMenu->setPosition(CCPointZero);
- this->addChild(radioMenu,1);