cocos2dx 3.x ControlButton的认识

1. ControlButton的介绍

ControlButton按钮的大小可以根据标签内容进行缩放,同时它具有很多按钮所需要的功能。

2.  ControlButton的使用

[html]  view plain copy print ?
  1. <span style="white-space:pre">    </span>//正常状态下的按钮图片  
  2.     Scale9Sprite* btnNormal = Scale9Sprite::create("button.png");  
  3.       
  4.     //单击状态下的按钮图片  
  5.     Scale9Sprite* btnPress = Scale9Sprite::create("buttonHighlighted.png");  
  6.   
  7.     //按钮标题  
  8.     LabelTTF* title = LabelTTF::create("touch me !","Marker Felt",30);  
  9.   
  10.     //创建按钮,按钮的大小根据标题自动调整  
  11.     ControlButton* btn = ControlButton::create(title,btnNormal);  
  12.       
  13.     //设置按钮按下时的图片  
  14.     btn->setBackgroundSpriteForState(btnPress,Control::State::SELECTED);  
  15.       
  16.     //强制设置按钮大小,如果按钮超过这个范围,则自动扩大  
  17.     btn->setPreferredSize(Size(300,50));  
  18.   
  19.     btn->setPosition(<span style="font-family:Arial, Helvetica, sans-serif;">Point</span>(200,200));  
  20.     this->addChild(btn);  

btn->setBackgroundSpriteForState(btnPress,Control::State::SELECTED);

State:NORMAL、HIGH_LIGHTED 、DISABLED、SELECTED 

[html]  view plain copy print ?
  1. NORMAL     = 1 << 0, // The normal, or default state of a control—that is, enabled but neither selected nor highlighted.  
  2. HIGH_LIGHTED   = 1 << 1, // Highlighted state of a control. A control enters this state when a touch down, drag inside or drag enter is performed. You can retrieve and set this value through the highlighted property.  
  3. DISABLED       = 1 << 2, // Disabled state of a control. This state indicates that the control is currently disabled. You can retrieve and set this value through the enabled property.  
  4. SELECTED       = 1 << 3  // Selected state of a control. This state indicates that the control is currently selected. You can retrieve and set this value through the selected property.  
个人暂时不太了解这几个状态的用处,日后补充


3. 按钮事件

playMusic.h

[html]  view plain copy print ?
  1. #ifndef __PLAYMUSIC_H__  
  2. #define __PLAYMUSIC_H__  
  3.   
  4. #include "cocos2d.h"  
  5. #include "extensions/cocos-ext.h"  
  6.   
  7.   
  8. USING_NS_CC;  
  9. USING_NS_CC_EXT;    
  10. class PlayMusic : public cocos2d::Layer {  
  11.   
  12. public:  
  13.   
  14.     static cocos2d::Scene* createScene();  
  15.   
  16.     virtual bool init();  
  17.   
  18.     CREATE_FUNC(PlayMusic);  
  19.   
  20.     void addChildAt(Node *node, float percentageX, float percentageY);  
  21. private:  
  22.   
  23.     void touchDown(Ref* pSender,Control::EventType event);  
  24.     void dragInside(Ref* pSender,Control::EventType event);  
  25.     void dragOutside(Ref* pSender,Control::EventType event);  
  26.     void dragEnter(Ref* pSender,Control::EventType event);  
  27.     void dragExit(Ref* pSender,Control::EventType event);  
  28.     void touchUpInside(Ref* pSender,Control::EventType event);  
  29.     void touchUpOutside(Ref* pSender,Control::EventType event);  
  30.     void touchCancel(Ref* pSender,Control::EventType event);  
  31.     void valueChanged(Ref* pSender,Control::EventType event);  
  32. };  
  33.   
  34. #endif  

playMusic.cpp

[html]  view plain copy print ?
  1. #include "playMusic.h"  
  2. #include "extensions/cocos-ext.h"  
  3.   
  4.   
  5. USING_NS_CC;  
  6. USING_NS_CC_EXT;    
  7.   
  8. Scene* PlayMusic::createScene()  
  9. {  
  10.     auto scene = Scene::create();  
  11.     auto layer = PlayMusic::create();  
  12.     scene->addChild(layer);  
  13.     return scene;  
  14. }  
  15.   
  16. bool PlayMusic::init()  
  17. {  
  18.     if ( !Layer::init() )  
  19.     {  
  20.         return false;  
  21.     }  
  22.     //正常状态下的按钮图片  
  23.     Scale9Sprite* btnNormal = Scale9Sprite::create("button.png");  
  24.       
  25.     //单击状态下的按钮图片  
  26.     Scale9Sprite* btnPress = Scale9Sprite::create("buttonHighlighted.png");  
  27.   
  28.     //按钮标题  
  29.     LabelTTF* title = LabelTTF::create("touch me !","Marker Felt",30);  
  30.   
  31.     //创建按钮,按钮的大小根据标题自动调整  
  32.     ControlButton* btn = ControlButton::create(title,btnNormal);  
  33.       
  34.     //设置按钮按下时的图片  
  35.     btn->setBackgroundSpriteForState(btnPress,Control::State::HIGH_LIGHTED);  
  36.       
  37.     //强制设置按钮大小,如果按钮超过这个范围,则自动扩大  
  38.     btn->setPreferredSize(Size(300,50));  
  39.   
  40.     btn->setPosition(Point(200,200));  
  41.   
  42.     btn->addTargetWithActionForControlEvents(this,cccontrol_selector(PlayMusic::touchDown),Control::EventType::TOUCH_DOWN);  
  43.     btn->addTargetWithActionForControlEvents(this,cccontrol_selector(PlayMusic::dragInside),Control::EventType::DRAG_INSIDE);  
  44.     btn->addTargetWithActionForControlEvents(this,cccontrol_selector(PlayMusic::dragOutside ),Control::EventType::DRAG_OUTSIDE );  
  45.     btn->addTargetWithActionForControlEvents(this,cccontrol_selector(PlayMusic::dragEnter),Control::EventType::DRAG_ENTER);  
  46.     btn->addTargetWithActionForControlEvents(this,cccontrol_selector(PlayMusic::dragExit),Control::EventType::DRAG_EXIT);  
  47.     btn->addTargetWithActionForControlEvents(this,cccontrol_selector(PlayMusic::touchUpInside),Control::EventType::TOUCH_UP_INSIDE);  
  48.     btn->addTargetWithActionForControlEvents(this,cccontrol_selector(PlayMusic::touchUpOutside ),Control::EventType::TOUCH_UP_OUTSIDE );  
  49.     btn->addTargetWithActionForControlEvents(this,cccontrol_selector(PlayMusic::touchCancel),Control::EventType::TOUCH_CANCEL);  
  50.     btn->addTargetWithActionForControlEvents(this,cccontrol_selector(PlayMusic::valueChanged),Control::EventType::VALUE_CHANGED);  
  51.   
  52.   
  53.     this->addChild(btn);  
  54.     return true;   
  55.   
  56. }  
  57. void PlayMusic::touchDown(Ref* pSender,Control::EventType event)  
  58. {  
  59.     log("touchdown");  
  60. }  
  61.   
  62. void PlayMusic::dragInside(Ref* pSender,Control::EventType event)  
  63. {  
  64.     log("dragInside");  
  65. }  
  66. void PlayMusic::dragOutside(Ref* pSender,Control::EventType event)  
  67. {  
  68.     log("dragOutside");  
  69. }  
  70. void PlayMusic::dragEnter(Ref* pSender,Control::EventType event)  
  71. {  
  72.     log("dragEnter");  
  73. }  
  74. void PlayMusic::dragExit(Ref* pSender,Control::EventType event)  
  75. {  
  76.     log("dragExit");  
  77. }  
  78. void PlayMusic::touchUpInside(Ref* pSender,Control::EventType event)  
  79. {  
  80.     log("touchUpInside");  
  81. }  
  82. void PlayMusic::touchUpOutside(Ref* pSender,Control::EventType event)  
  83. {  
  84.     log("touchUpOutside");  
  85. }  
  86. void PlayMusic::touchCancel(Ref* pSender,Control::EventType event)  
  87. {  
  88.     log("touchCancel");  
  89. }  
  90. void PlayMusic::valueChanged(Ref* pSender,Control::EventType event)  
  91. {  
  92.     log("valueChanged");  
  93. }  

[html]  view plain copy print ?
  1. TOUCH_DOWN           = 1 << 0,    // A touch-down event in the control.  
  2. DRAG_INSIDE          = 1 << 1,    // An event where a finger is dragged inside the bounds of the control.  
  3. DRAG_OUTSIDE         = 1 << 2,    // An event where a finger is dragged just outside the bounds of the control.  
  4. DRAG_ENTER           = 1 << 3,    // An event where a finger is dragged into the bounds of the control.  
  5. DRAG_EXIT            = 1 << 4,    // An event where a finger is dragged from within a control to outside its bounds.  
  6. TOUCH_UP_INSIDE      = 1 << 5,    // A touch-up event in the control where the finger is inside the bounds of the control.  
  7. TOUCH_UP_OUTSIDE     = 1 << 6,    // A touch-up event in the control where the finger is outside the bounds of the control.  
  8. TOUCH_CANCEL         = 1 << 7,    // A system event canceling the current touches for the control.  
  9. VALUE_CHANGED        = 1 << 8      // A touch dragging or otherwise manipulating a control, causing it to emit a series of different values.  
TOUCH_DOWN             按下按钮调用事件
DRAG_INSIDE             当处于按下并点中按钮的状态下,进入按钮范围,则触发,可以多次触发
DRAG_OUTSIDE             当处于按下并点中按钮的状态下,离开按钮范围,则触发,可以多次触发
DRAG_ENTER              当处于按下并点中按钮的状态下,进入按钮范围,则触发,一次
DRAG_EXIT                      当处于按下并点中按钮的状态下,离开按钮范围,则触发,一次
TOUCH_UP_INSIDE      当处于按下并点中按钮的状态下,鼠标松开且在按钮范围内,则触发,一次
TOUCH_UP_OUTSIDE   当处于按下并点中按钮的状态下,鼠标松开且在按钮范围外,则触发,一次
TOUCH_CANCEL     系统事件中断按钮事件而触发

VALUE_CHANGED       触摸拖曳或操纵控制,让它发出一系列的不同的值。


原文来自:http://blog.csdn.net/lengxue789/article/details/38228935

你可能感兴趣的:(编程,C++,cocos2dx,cocos2d-x,手游)