cocos2dx radiogrouop单选按钮的实现

前端之家收集整理的这篇文章主要介绍了cocos2dx radiogrouop单选按钮的实现前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. #ifndef __SceneHello__CCRadioMenu__
  2. #define __SceneHello__CCRadioMenu__
  3. #include "cocos2d.h"
  4. class CCRadioMenu : public cocos2d::CCMenu{
  5. public:
  6. CCRadioMenu():cocos2d::CCMenu(){}
  7. cocos2d::CCMenuItem *_curHighlighted;
  8. virtual bool ccTouchBegan(cocos2d::CCTouch *pTouch,cocos2d::CCEvent *pEvent);
  9. virtual void ccTouchEnded(cocos2d::CCTouch *pTouch,cocos2d::CCEvent *pEvent);
  10. virtual void ccTouchCancelled(cocos2d::CCTouch *pTouch,cocos2d::CCEvent *pEvent);
  11. virtual void ccTouchMoved(cocos2d::CCTouch *pTouch,cocos2d::CCEvent *pEvent);
  12. void setSelectedItem_(cocos2d::CCMenuItem *item);
  13. static CCRadioMenu* create(cocos2d::CCMenuItem* item,...);
  14. };
  15. #endif /* defined(__SceneHello__CCRadioMenu__) */


  1. #include "CCRadioMenu.h"
  2. using namespace cocos2d;
  3. CCRadioMenu *CCRadioMenu::create(CCMenuItem *item,...){
  4. va_list args;
  5. va_start(args,item);
  6. CCRadioMenu *pRet = new CCRadioMenu();
  7. CCArray* pArray = NULL;
  8. if( item )
  9. {
  10. pArray = CCArray::create(item,NULL);
  11. CCMenuItem *i = va_arg(args,CCMenuItem*);
  12. while(i)
  13. {
  14. pArray->addObject(i);
  15. i = va_arg(args,CCMenuItem*);
  16. }
  17. }
  18. if (pRet && pRet->initWithArray(pArray))
  19. {
  20. pRet->autorelease();
  21. va_end(args);
  22. return pRet;
  23. }
  24. va_end(args);
  25. CC_SAFE_DELETE(pRet);
  26. return NULL;
  27. }
  28.  
  29. void CCRadioMenu::setSelectedItem_(CCMenuItem *item){
  30. m_pSelectedItem = NULL;
  31. m_pSelectedItem = item;
  32. }
  33.  
  34. bool CCRadioMenu::ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent){
  35. if (m_eState != kCCMenuStateWaiting) return false;
  36. CCMenuItem *curSelection = this->itemForTouch(pTouch);
  37. if (curSelection) {
  38. curSelection->selected();
  39. _curHighlighted = curSelection;
  40. if (_curHighlighted) {
  41. if (m_pSelectedItem != curSelection) {
  42. m_pSelectedItem->unselected();
  43. }
  44. m_eState = kCCMenuStateTrackingTouch;
  45. return true;
  46. }
  47. }
  48. return false;
  49. }
  50.  
  51. void CCRadioMenu::ccTouchEnded(CCTouch *pTouch,CCEvent *pEvent){
  52. CCAssert(m_eState == kCCMenuStateTrackingTouch,"[Menu ccTouchEnded] -- invalid state");
  53. CCMenuItem *curSelection = this->itemForTouch(pTouch);
  54. if (curSelection != _curHighlighted && curSelection != NULL) {
  55. m_pSelectedItem->selected();
  56. _curHighlighted->unselected();
  57. _curHighlighted = NULL;
  58. m_eState = kCCMenuStateWaiting;
  59. return;
  60. }
  61. m_pSelectedItem = _curHighlighted;
  62. _curHighlighted->activate();
  63. _curHighlighted = NULL;
  64. m_eState = kCCMenuStateWaiting;
  65. }
  66.  
  67. void CCRadioMenu::ccTouchCancelled(CCTouch *pTouch,CCEvent *pEvent){
  68. CCAssert(m_eState == kCCMenuStateTrackingTouch,"[Menu ccTouchCancelled] -- invalid state");
  69. m_pSelectedItem->selected();
  70. _curHighlighted->unselected();
  71. _curHighlighted = NULL;
  72. m_eState = kCCMenuStateWaiting;
  73. }
  74.  
  75. void CCRadioMenu::ccTouchMoved(CCTouch *pTouch,"[Menu ccTouchMoved] -- invalid state");
  76. CCMenuItem *curSelection = this->itemForTouch(pTouch);
  77. if (curSelection != _curHighlighted && curSelection != NULL) {
  78. _curHighlighted->unselected();
  79. curSelection->selected();
  80. _curHighlighted = curSelection;
  81. return;
  82. }
  83. }
用法
  1. CCMenuItemImage *menuItem_man = CCMenuItemImage::create(
  2. "jsman_nor.png","jsman_pre.png",this,menu_selector(HelloWorld::selectMan));
  3. menuItem_man->setPosition(ccp(size.width*0.3f,size.height*0.66f));
  4.  
  5. CCMenuItemImage *menuItem_man2 = CCMenuItemImage::create(
  6. "jsman_nor.png",menu_selector(HelloWorld::selectMan));
  7. menuItem_man2->setPosition(ccp(size.width*0.3f,size.height*0.3f));
  8. CCMenuItemImage *menuItem_woman = CCMenuItemImage::create(
  9. "jswoman_nor.png","jswoman_pre.png",menu_selector(HelloWorld::selectWomen));
  10. menuItem_woman->setPosition(ccp(size.width*0.7f,size.height*0.66f));
  11.  
  12. CCMenuItemImage *menuItem_woman2 = CCMenuItemImage::create(
  13. "jswoman_nor.png",menu_selector(HelloWorld::selectWomen));
  14. menuItem_woman2->setPosition(ccp(size.width*0.7f,size.height*0.3f));
  15.  
  16. CCRadioMenu *radioMenu = CCRadioMenu::create(menuItem_man,menuItem_man2,menuItem_woman,menuItem_woman2,NULL);
  17. radioMenu->setSelectedItem_(menuItem_man);
  18. menuItem_man->selected();
  19. radioMenu->setPosition(CCPointZero);
  20. this->addChild(radioMenu,1);

猜你在找的Cocos2d-x相关文章