头文件 #include"extensions/cocos-ext.h"
1. ControlButton的介绍
ControlButton按钮的大小可以根据标签内容进行缩放,同时它具有很多按钮所需要的功能。
2. ControlButton的使用
- <span style="white-space:pre"> </span>//正常状态下的按钮图片
- Scale9Sprite* btnNormal = Scale9Sprite::create("button.png");
- //单击状态下的按钮图片
- Scale9Sprite* btnPress = Scale9Sprite::create("buttonHighlighted.png");
- //按钮标题
- LabelTTF* title = LabelTTF::create("touch me !","Marker Felt",30);
- //创建按钮,按钮的大小根据标题自动调整
- ControlButton* btn = ControlButton::create(title,btnNormal);
- //设置按钮按下时的图片
- btn->setBackgroundSpriteForState(btnPress,Control::State::SELECTED);
- //强制设置按钮大小,如果按钮超过这个范围,则自动扩大
- btn->setPreferredSize(Size(300,50));
- btn->setPosition(<span style="font-family:Arial, Helvetica, sans-serif;">Point</span>(200,200));
- this->addChild(btn);
btn->setBackgroundSpriteForState(btnPress,Control::State::SELECTED);
State:NORMAL、HIGH_LIGHTED 、DISABLED、SELECTED
- NORMAL = 1 << 0, // The normal, or default state of a control—that is, enabled but neither selected nor highlighted.
- 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.
- 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.
- 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
- #ifndef __PLAYMUSIC_H__
- #define __PLAYMUSIC_H__
- #include "cocos2d.h"
- #include "extensions/cocos-ext.h"
- USING_NS_CC;
- USING_NS_CC_EXT;
- class PlayMusic : public cocos2d::Layer {
- public:
- static cocos2d::Scene* createScene();
- virtual bool init();
- CREATE_FUNC(PlayMusic);
- void addChildAt(Node *node, float percentageX, float percentageY);
- private:
- void touchDown(Ref* pSender,Control::EventType event);
- void dragInside(Ref* pSender,Control::EventType event);
- void dragOutside(Ref* pSender,Control::EventType event);
- void dragEnter(Ref* pSender,Control::EventType event);
- void dragExit(Ref* pSender,Control::EventType event);
- void touchUpInside(Ref* pSender,Control::EventType event);
- void touchUpOutside(Ref* pSender,Control::EventType event);
- void touchCancel(Ref* pSender,Control::EventType event);
- void valueChanged(Ref* pSender,Control::EventType event);
- };
- #endif
playMusic.cpp
- #include "playMusic.h"
- #include "extensions/cocos-ext.h"
- USING_NS_CC;
- USING_NS_CC_EXT;
- Scene* PlayMusic::createScene()
- {
- auto scene = Scene::create();
- auto layer = PlayMusic::create();
- scene->addChild(layer);
- return scene;
- }
- bool PlayMusic::init()
- {
- if ( !Layer::init() )
- {
- return false;
- }
- //正常状态下的按钮图片
- Scale9Sprite* btnNormal = Scale9Sprite::create("button.png");
- //单击状态下的按钮图片
- Scale9Sprite* btnPress = Scale9Sprite::create("buttonHighlighted.png");
- //按钮标题
- LabelTTF* title = LabelTTF::create("touch me !","Marker Felt",30);
- //创建按钮,按钮的大小根据标题自动调整
- ControlButton* btn = ControlButton::create(title,btnNormal);
- //设置按钮按下时的图片
- btn->setBackgroundSpriteForState(btnPress,Control::State::HIGH_LIGHTED);
- //强制设置按钮大小,如果按钮超过这个范围,则自动扩大
- btn->setPreferredSize(Size(300,50));
- btn->setPosition(Point(200,200));
- btn->addTargetWithActionForControlEvents(this,cccontrol_selector(PlayMusic::touchDown),Control::EventType::TOUCH_DOWN);
- btn->addTargetWithActionForControlEvents(this,cccontrol_selector(PlayMusic::dragInside),Control::EventType::DRAG_INSIDE);
- btn->addTargetWithActionForControlEvents(this,cccontrol_selector(PlayMusic::dragOutside ),Control::EventType::DRAG_OUTSIDE );
- btn->addTargetWithActionForControlEvents(this,cccontrol_selector(PlayMusic::dragEnter),Control::EventType::DRAG_ENTER);
- btn->addTargetWithActionForControlEvents(this,cccontrol_selector(PlayMusic::dragExit),Control::EventType::DRAG_EXIT);
- btn->addTargetWithActionForControlEvents(this,cccontrol_selector(PlayMusic::touchUpInside),Control::EventType::TOUCH_UP_INSIDE);
- btn->addTargetWithActionForControlEvents(this,cccontrol_selector(PlayMusic::touchUpOutside ),Control::EventType::TOUCH_UP_OUTSIDE );
- btn->addTargetWithActionForControlEvents(this,cccontrol_selector(PlayMusic::touchCancel),Control::EventType::TOUCH_CANCEL);
- btn->addTargetWithActionForControlEvents(this,cccontrol_selector(PlayMusic::valueChanged),Control::EventType::VALUE_CHANGED);
- this->addChild(btn);
- return true;
- }
- void PlayMusic::touchDown(Ref* pSender,Control::EventType event)
- {
- log("touchdown");
- }
- void PlayMusic::dragInside(Ref* pSender,Control::EventType event)
- {
- log("dragInside");
- }
- void PlayMusic::dragOutside(Ref* pSender,Control::EventType event)
- {
- log("dragOutside");
- }
- void PlayMusic::dragEnter(Ref* pSender,Control::EventType event)
- {
- log("dragEnter");
- }
- void PlayMusic::dragExit(Ref* pSender,Control::EventType event)
- {
- log("dragExit");
- }
- void PlayMusic::touchUpInside(Ref* pSender,Control::EventType event)
- {
- log("touchUpInside");
- }
- void PlayMusic::touchUpOutside(Ref* pSender,Control::EventType event)
- {
- log("touchUpOutside");
- }
- void PlayMusic::touchCancel(Ref* pSender,Control::EventType event)
- {
- log("touchCancel");
- }
- void PlayMusic::valueChanged(Ref* pSender,Control::EventType event)
- {
- log("valueChanged");
- }
- TOUCH_DOWN = 1 << 0, // A touch-down event in the control.
- DRAG_INSIDE = 1 << 1, // An event where a finger is dragged inside the bounds of the control.
- DRAG_OUTSIDE = 1 << 2, // An event where a finger is dragged just outside the bounds of the control.
- DRAG_ENTER = 1 << 3, // An event where a finger is dragged into the bounds of the control.
- DRAG_EXIT = 1 << 4, // An event where a finger is dragged from within a control to outside its bounds.
- TOUCH_UP_INSIDE = 1 << 5, // A touch-up event in the control where the finger is inside the bounds of the control.
- TOUCH_UP_OUTSIDE = 1 << 6, // A touch-up event in the control where the finger is outside the bounds of the control.
- TOUCH_CANCEL = 1 << 7, // A system event canceling the current touches for the control.
- VALUE_CHANGED = 1 << 8 // A touch dragging or otherwise manipulating a control, causing it to emit a series of different values.
DRAG_INSIDE 当处于按下并点中按钮的状态下,进入按钮范围,则触发,可以多次触发
DRAG_OUTSIDE 当处于按下并点中按钮的状态下,离开按钮范围,则触发,可以多次触发
DRAG_ENTER 当处于按下并点中按钮的状态下,进入按钮范围,则触发,一次
DRAG_EXIT 当处于按下并点中按钮的状态下,离开按钮范围,则触发,一次
TOUCH_UP_INSIDE 当处于按下并点中按钮的状态下,鼠标松开且在按钮范围内,则触发,一次
TOUCH_UP_OUTSIDE 当处于按下并点中按钮的状态下,鼠标松开且在按钮范围外,则触发,一次
TOUCH_CANCEL 系统事件中断按钮事件而触发
VALUE_CHANGED 触摸拖曳或操纵控制,让它发出一系列的不同的值。
1. Button 的创建
- Size visibleSize = Director::getInstance()->getVisibleSize();
- //创建button对象
- auto btn = Button::create("button.png","buttonHighlighted.png");
- //打开scale9 可以拉伸图片
- btn->setScale9Enabled(true);
- //设置button title
- btn->setTitleText("Jump");
- //设置button title字体大小
- btn->setTitleFontSize(35);
- //设置btn的内容大小
- btn->setContentSize(Size(100,50));
- //设置btn的位置
- btn->setPosition(Vec2(visibleSize.width-100,50));
- //强制设置按钮大小,如果按钮超过这个范围,则自动扩大
- btn->setPreferredSize(Size(300,50));
- //为按钮添加触摸事件监听
- btn->addTouchEventListener(CC_CALLBACK_2(TollgateScene::jumpEvent,this));
- this->addChild(btn,4);
2. 按钮的监听事件
//为按钮添加触摸事件监听
btn->addTouchEventListener(CC_CALLBACK_2(TollgateScene::jumpEvent,this));
其中 TouchEventType有四个值:
BEGAN :按钮按下的type
MOVED: 按钮按下并移动
ENDED:按钮结束按下的type
CANCELED:按钮中断的type
- void UIButtonTest_Editor::touchEvent(Ref *pSender, Widget::TouchEventType type)
- {
- switch (type)
- {
- case Widget::TouchEventType::BEGAN:
- _displayValueLabel->setString("Touch Down");
- break;
- case Widget::TouchEventType::MOVED:
- _displayValueLabel->setString("Touch Moved");
- break;
- case Widget::TouchEventType::ENDED:
- _displayValueLabel->setString("Touch Ended");
- break;
- case Widget::TouchEventType::CANCELED:
- _displayValueLabel->setString("Touch Canceled");
- break;
- default:
- break;
- }
- }
DRAG_INSIDE 当处于按下并点中按钮的状态下,进入按钮范围,则触发,可以多次触发
DRAG_OUTSIDE 当处于按下并点中按钮的状态下,离开按钮范围,则触发,可以多次触发
DRAG_ENTER 当处于按下并点中按钮的状态下,进入按钮范围,则触发,一次
DRAG_EXIT 当处于按下并点中按钮的状态下,离开按钮范围,则触发,一次
TOUCH_UP_INSIDE 当处于按下并点中按钮的状态下,鼠标松开且在按钮范围内,则触发,一次
TOUCH_UP_OUTSIDE 当处于按下并点中按钮的状态下,鼠标松开且在按钮范围外,则触发,一次
TOUCH_CANCEL 系统事件中断按钮事件而触发
VALUE_CHANGED 触摸拖曳或操纵控制,让它发出一系列的不同的值。