【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. 实现MD5算法

    using System; using System.Text; using System.Security.Cryptography; namespace Common { /// <summ ...

  2. Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion' has value '1.8', but '1.7'

    第一种方法:安装1.8之前安装了1.7,将1.7卸载就好了. 第二种方法:删掉Windows\System32下的java.exe, javaw.exe 就行了,但是安装的1.8的jdk会回到1.7的 ...

  3. (转) weblogic 12c忘记密码

    weblogic安装后,很久不用,忘记访问控制台的用户名或者密码,可通过以下步骤来重置用户名密码. 说明:%DOMAIN_HOME%:指WebLogic Server 域(Domain)目录 我的是: ...

  4. selenium操作下拉选和网页提示框

    import time from selenium import webdriver from selenium.webdriver.support.select import Select#处理下拉 ...

  5. mysql视图创建

    create or replace view partner_v as select a.id,vendorname,address,nation,contactperson,tel1,tel2,jy ...

  6. Vue文件路径引入

  7. node 中process进程argv,argv0,execArgv,execPath

    1.argv const {argv,argv0,execPath v,execPath} = process; argv.forEach(item=>{ console.log(item); ...

  8. JS获取URL指定的参数值

    function GetUrlValue(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)( ...

  9. Vue.js 使用 Font Awesome 小图标

    1.安装 Font Awesome npm i --save @fortawesome/fontawesome-svg-core npm i --save @fortawesome/free-soli ...

  10. Mybatis学习笔记之---多表查询(2)

    Mybatis多表查询(2) (一)举例 用户和角色 一个用户可以有多个角色,一个角色可以赋予多个用户 (二)步骤 1.建立两张表:用户表,角色表,让用户表和角色表具有多对多的关系.需要使用中间表,中 ...