ControlButton

  头文件  #include"extensions/cocos-ext.h"


1. ControlButton的介绍

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

2.  ControlButton的使用

[html]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  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 ? 在CODE上查看代码片 派生到我的代码片
  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 ? 在CODE上查看代码片 派生到我的代码片
  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 ? 在CODE上查看代码片 派生到我的代码片
  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 ? 在CODE上查看代码片 派生到我的代码片
  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       触摸拖曳或操纵控制,让它发出一系列的不同的值。


1. Button 的创建

(1)Button的创建 create方法
Button::create()
Button::create(const std::string &normalImage,const std::string& selectedImage , const std::string& disableImage, TextureResType texType)
normalImage:正常状态的纹理贴图
selectedImage : 选中状态的纹理贴图
disableImage:禁用状态的纹理贴图
(2)拉伸图片
btn->setScale9Enabled(true) 打开scale9 可以拉伸图片,类似android 中9.png的图片

[html]  view plain copy print ?
  1. Size visibleSize = Director::getInstance()->getVisibleSize();  
  2.   
  3. //创建button对象  
  4. auto btn = Button::create("button.png","buttonHighlighted.png");  
  5.   
  6. //打开scale9 可以拉伸图片  
  7. btn->setScale9Enabled(true);  
  8.   
  9. //设置button title  
  10. btn->setTitleText("Jump");  
  11.   
  12. //设置button title字体大小  
  13. btn->setTitleFontSize(35);  
  14.   
  15. //设置btn的内容大小  
  16. btn->setContentSize(Size(100,50));  
  17.   
  18. //设置btn的位置  
  19. btn->setPosition(Vec2(visibleSize.width-100,50));  

  1.  //强制设置按钮大小,如果按钮超过这个范围,则自动扩大  
  2.     btn->setPreferredSize(Size(300,50));  

  1.   
  2. //为按钮添加触摸事件监听  
  3. btn->addTouchEventListener(CC_CALLBACK_2(TollgateScene::jumpEvent,this));  
  4.   
  5. this->addChild(btn,4);  

2. 按钮的监听事件

//为按钮添加触摸事件监听
btn->addTouchEventListener(CC_CALLBACK_2(TollgateScene::jumpEvent,this));

其中 TouchEventType有四个值:

BEGAN :按钮按下的type

MOVED: 按钮按下并移动

ENDED:按钮结束按下的type

CANCELED:按钮中断的type

[html]  view plain copy print ?
  1. void UIButtonTest_Editor::touchEvent(Ref *pSender, Widget::TouchEventType type)  
  2. {  
  3.     switch (type)  
  4.     {  
  5.         case Widget::TouchEventType::BEGAN:  
  6.             _displayValueLabel->setString("Touch Down");  
  7.             break;  
  8.               
  9.         case Widget::TouchEventType::MOVED:  
  10.             _displayValueLabel->setString("Touch Moved");  
  11.             break;  
  12.               
  13.         case Widget::TouchEventType::ENDED:  
  14.             _displayValueLabel->setString("Touch Ended");  
  15.             break;  
  16.               
  17.         case Widget::TouchEventType::CANCELED:  
  18.             _displayValueLabel->setString("Touch Canceled");  
  19.             break;  
  20.               
  21.         default:  
  22.             break;  
  23.     }  
  24. }  

DRAG_INSIDE            当处于按下并点中按钮的状态下,进入按钮范围,则触发,可以多次触发
DRAG_OUTSIDE            当处于按下并点中按钮的状态下,离开按钮范围,则触发,可以多次触发
DRAG_ENTER            当处于按下并点中按钮的状态下,进入按钮范围,则触发,一次
DRAG_EXIT                    当处于按下并点中按钮的状态下,离开按钮范围,则触发,一次
TOUCH_UP_INSIDE    当处于按下并点中按钮的状态下,鼠标松开且在按钮范围内,则触发,一次
TOUCH_UP_OUTSIDE  当处于按下并点中按钮的状态下,鼠标松开且在按钮范围外,则触发,一次
TOUCH_CANCEL    系统事件中断按钮事件而触发
VALUE_CHANGED       触摸拖曳或操纵控制,让它发出一系列的不同的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值