【3.x】

(1)去掉 “CC”

(2)对象类 CCObject 改为 Ref

(3)标签类 LabelTTF 改为 Label

(4)CCControlEvent 改为强枚举 Control::EventType

(5)CCControlEventValueChanged 改为 Control::EventType::VALUE_CHANGED

(6)按钮事件回调依旧为 cccontrol_selector ,没有使用 CC_CALLBACK_2

(7)关于创建函数create,必须引起注意!

> 这是3.x的一个BUG。

//
//v3.x会报错,必须指定onLabel、offLabel。不能为nullptr
create(Sprite* maskSprite, Sprite* onSprite, Sprite* offSprite, Sprite* thumbSprite); //v3.x版本中,必须使用这个来创建
create(Sprite* maskSprite, Sprite* onSprite, Sprite* offSprite, Sprite* thumbSprite, Label* onLabel, Label* offLabel);
//

开关控件CCControlSwitch,应该也是很常见的UI控件,想必大家都不陌生。比如声音开关的控制,一些功能的启用与禁用都需要用到开关控件。

1、CCControl主要向开关类CCControlSwitch提供了以下控件事件

//
CCControlEventValueChanged //当控件的值发生改变时触发。
//

2、绑定控件事件的方法

//
//绑定控件事件
//addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::valueChanged), CCControlEventValueChanged);
void addTargetWithActionForControlEvents(CCObject* target, SEL_CCControlHandler action, CCControlEvent controlEvents); //删除控件事件
//removeTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::valueChanged), CCControlEventValueChanged);
void removeTargetWithActionForControlEvents(CCObject* target, SEL_CCControlHandler action, CCControlEvent controlEvents);
//

3、需要引用以下头文件及命名空间

//
#include "cocos-ext.h" //包含cocos-ext.h头文件
using namespace cocos2d::extension; //引用cocos2d::extension命名空间
//

4、常用操作

//
class CCControlSwitch : public CCControl
{
/**
* 创建CCControlSwitch的两种方式
*/
//CCControlSwitch::create("底图","打开状态图","关闭状态图","拨动开关图");
//v3.x会报错,必须指定onLabel、offLabel
static CCControlSwitch* create(CCSprite *maskSprite, CCSprite * onSprite, CCSprite * offSprite, CCSprite * thumbSprite); //CCControlSwitch::create("底图","打开状态图","关闭状态图","拨动开关图","打开状态文字","关闭状态文字");
static CCControlSwitch* create(CCSprite *maskSprite, CCSprite * onSprite, CCSprite * offSprite, CCSprite * thumbSprite, CCLabelTTF* onLabel, CCLabelTTF* offLabel); /**
* 设置开关状态
* setOn , isOn , hasMoved , setEnabled
*/
void setOn(bool isOn); //设置开关状态
void setOn(bool isOn, bool animated); //设置开关状态
bool isOn(void) { return m_bOn; } //获取开关状态
bool hasMoved() { return m_bMoved; } //获取当前开关是否为手动拨动开关(区别于点击拨动)
virtual void setEnabled(bool enabled); //设置开关是否能操作 };
//

【代码实战】

1、资源图片

2、引入文件和命名空间

//
#include "cocos-ext.h"
using namespace cocos2d::extension;
//

3、在HelloWorld.h中声明控件回调函数、显示开关的状态Label

//
CCLabelTTF* label; //用于显示开关控件的状态ON/OFF void valueChanged(CCObject* sender, CCControlEvent controlEvent); //当值改变时触发的控件事件
//

4、在HelloWorld.cpp中分别创建两种方式的开关控件

//
//第一组开关
CCSprite* bg1 = CCSprite::create("ControlSwith_bg.png");
CCSprite* on1 = CCSprite::create("ControlSwith_on.png");
CCSprite* off1 = CCSprite::create("ControlSwith_off.png");
CCSprite* thumb1 = CCSprite::create("ControlSwith_thumb.png");
CCControlSwitch* controlSwitch1 = CCControlSwitch::create(bg1, on1, off1, thumb1);
controlSwitch1->setPosition( midPos - ccp(100, 100) );
this->addChild(controlSwitch1); //绑定事件,当开关控件的值发生改变时触发事件。
controlSwitch1->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::valueChanged), CCControlEventValueChanged); //第二组开关
CCSprite* bg2 = CCSprite::create("switch-mask.png");
CCSprite* on2 = CCSprite::create("switch-off.png");
CCSprite* off2 = CCSprite::create("switch-on.png");
CCSprite* thumb2 = CCSprite::create("switch-thumb.png");
CCLabelTTF* TTFon = CCLabelTTF::create("on", "Arial", 20);
CCLabelTTF* TTFoff = CCLabelTTF::create("off", "Arial", 20);
CCControlSwitch* controlSwitch2 = CCControlSwitch::create(bg2, on2, off2, thumb2, TTFon, TTFoff);
controlSwitch2->setPosition( midPos - ccp(-100, 100) );
this->addChild(controlSwitch2);
//

5、实现控件回调函数

//
//事件响应函数,值改变时,修改label标签的内容
void HelloWorld::valueChanged(CCObject* sender, CCControlEvent controlEvent)
{
//获取事件的传递者CCControlSwitch
CCControlSwitch* controlSwitch = (CCControlSwitch*)sender; //根据开关控件的状态,设置label标签的内容
if( controlSwitch->isOn() )
{
label->setString("ON");
}
else
{
label->setString("OFF");
}
}
//

6、运行结果

cocos2dx基础篇(8) 开关按钮CCControlSwitch的更多相关文章

  1. cocos2dx基础篇(3) 常用重要类

    ---------------------------------------- 入口类main.cpp 主要控制类AppDelegate.cpp -------------------------- ...

  2. 【Cocos2d入门教程二】Cocos2d-x基础篇

    上一章已经学习了环境的搭建.这一章对基础概念进行掌握.内容大概有: 1.导演 2.场景 3.节点 4.层 4.精灵 1.导演(Director) 导演存在的主要作用: a.环境设定(帧率 初始化ope ...

  3. cocos2dx基础篇(23) 粒子系统CCParticleSystem

    [3.x]     (1)去掉"CC"     (2)粒子位置模式 tPositionType 改为强枚举类型 ParticleSystem::PositionType:: // ...

  4. cocos2dx基础篇(22) 基本动画CCAnimation/CCAnimate

    [小知识] CCSpriteFrame     :精灵帧.    它是相对动画而产生的,其实就是一张纹理图片. CCAnimationFrame  :动画帧.    由精灵帧与间隔帧数组成,是动画CC ...

  5. cocos2dx基础篇(5) 按钮

    这篇是直接复制的别人的,太多了,难得写... [本节内容] CCMenu.CCMenuItem其具体的六个子类 [菜单CCMenu] 菜单CCMenu是用来装载菜单按钮的图层,图层中的子节点只能够是菜 ...

  6. cocos2dx基础篇(15) 列表视图CCTableView

    [3.x] (1)去掉 "CC" (2)TableViewCell 中: > unsigned int getIdx() 返回类型改为 ssize_t(类型为 long) ( ...

  7. cocos2dx基础篇(28) 布景层Layer的三个子类

    [3.x]     (1)去掉 "CC" [CCLayerColor] 颜色布景层CCLayerColor有两个父类:CCLayerRGBA.CCBlendProtocol.相信有 ...

  8. cocos2dx基础篇(27) 屏幕适配

    [3.x]https://blog.csdn.net/qq_40338728/article/details/82964046 [屏幕适配] 1.两个分辨率 1.1.窗口分辨率 在main.cpp中有 ...

  9. cocos2dx基础篇(26) 单例模式

    单例模式,说的通俗一点就是:创建某个类的全局唯一静态实例对象.也就是说从它创建开始,一直到整个游戏程序结束才会释放资源,期间一直保存的着数据. 单例类在大部分游戏中应该是必不可少的部分,如整个游戏音乐 ...

随机推荐

  1. - Power Strings (字符串哈希) (KMP)

    https://www.cnblogs.com/widsom/p/8058358.htm (详细解释) //#include<bits/stdc++.h> #include<vect ...

  2. token和sign

    前言 在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等, ...

  3. ubuntu 安装nginx redis dotnet

    1 安装nginx sudo apt-get update sudo apt-get install nginx 配置文件 /etc/nginx/nginx.conf 2 安装redis sudo a ...

  4. json格式字符串转字典

    //json格式字符串转字典+ (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString {        if (jsonStr ...

  5. python之路day13--迭代器

    迭代器 我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的ge ...

  6. 【windows&flask】flask通过service自动运行

    最近在学习在windows平台用flask框架提供Restful API服务,需要使得flask的windows应用能够开机自动运行,并且后台运行,所以通过service来实现. 首先尝试的是在自己派 ...

  7. VS2017 + EF + MySQL 环境配置

    我使用过程中遇到的坑(血泪啊) 安装环境VS2017MVC+WIN10+EF6+MySQL8.0.12 1.安装MySQL connector一定要6.10.8,8.0以上全是坑,会闪退!!! 2.安 ...

  8. CondaHTTPError问题的解决

    我是在配置pytorch时遇到的这个错误,截图如下: 这是某个网址访问失败导致的,我们可以通过添加其他路径解决这个问题,分别添加如下4个镜像路径,解决问题: 1)conda config --add ...

  9. mven pom.xml Overriding managed version 问题解决详解

    问题原因:在于默认的parent中的版本springboot有固定的指定 删除指定版本 <dependency> <groupId>junit</groupId> ...

  10. print和赋值

    赋值 #可同时(并行)给多个变量赋值 x, y, z = 1, 2, 3 #交换多个变量的值 x, y = y, x 序列解包(或可迭代对象解包):将一个序列(或任何可迭代对象)解包,并将得到的值存储 ...