cocos2dx基础篇(8) 开关按钮CCControlSwitch
【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的更多相关文章
- cocos2dx基础篇(3) 常用重要类
---------------------------------------- 入口类main.cpp 主要控制类AppDelegate.cpp -------------------------- ...
- 【Cocos2d入门教程二】Cocos2d-x基础篇
上一章已经学习了环境的搭建.这一章对基础概念进行掌握.内容大概有: 1.导演 2.场景 3.节点 4.层 4.精灵 1.导演(Director) 导演存在的主要作用: a.环境设定(帧率 初始化ope ...
- cocos2dx基础篇(23) 粒子系统CCParticleSystem
[3.x] (1)去掉"CC" (2)粒子位置模式 tPositionType 改为强枚举类型 ParticleSystem::PositionType:: // ...
- cocos2dx基础篇(22) 基本动画CCAnimation/CCAnimate
[小知识] CCSpriteFrame :精灵帧. 它是相对动画而产生的,其实就是一张纹理图片. CCAnimationFrame :动画帧. 由精灵帧与间隔帧数组成,是动画CC ...
- cocos2dx基础篇(5) 按钮
这篇是直接复制的别人的,太多了,难得写... [本节内容] CCMenu.CCMenuItem其具体的六个子类 [菜单CCMenu] 菜单CCMenu是用来装载菜单按钮的图层,图层中的子节点只能够是菜 ...
- cocos2dx基础篇(15) 列表视图CCTableView
[3.x] (1)去掉 "CC" (2)TableViewCell 中: > unsigned int getIdx() 返回类型改为 ssize_t(类型为 long) ( ...
- cocos2dx基础篇(28) 布景层Layer的三个子类
[3.x] (1)去掉 "CC" [CCLayerColor] 颜色布景层CCLayerColor有两个父类:CCLayerRGBA.CCBlendProtocol.相信有 ...
- cocos2dx基础篇(27) 屏幕适配
[3.x]https://blog.csdn.net/qq_40338728/article/details/82964046 [屏幕适配] 1.两个分辨率 1.1.窗口分辨率 在main.cpp中有 ...
- cocos2dx基础篇(26) 单例模式
单例模式,说的通俗一点就是:创建某个类的全局唯一静态实例对象.也就是说从它创建开始,一直到整个游戏程序结束才会释放资源,期间一直保存的着数据. 单例类在大部分游戏中应该是必不可少的部分,如整个游戏音乐 ...
随机推荐
- C# WinFrom自适应
1.在窗体的Project中建一个自适应的类. 2.类的代码如下 public class AutoSizeForm { //(1).声明结构,只记录窗体和其控件的初始位置和大小. public st ...
- 彻底解决 TypeScript 报错:“无法重新声明块范围变量”的问题
背景 当使用 TypeScript + TSlint + Babel + Jest 搭建开发环境时,在开发过程中偶尔会被 IDE 提示「无法重新声明块范围变量」,从而导致编译出错,报错图示如下: 相关 ...
- 【POJ3162】Walking Race 树形dp+单调队列+双指针
题目大意:给定一棵 N 个节点的无根树,边有边权,现生成一个序列 d,d[i] 表示 i 号节点到树上其他节点距离的最大值.给定一个 m,求 d 序列中最大值和最小值之差不超过 m 的最长连续段的长度 ...
- php目录函数操作,以及使用递归
opendir 找到对应的目录 将目录中所有文件全部读入到内存(包含子文件夹下的所有文件) 将目录指针指向第一个文件 readdir 读取当前指针所指向的文件的文件名 2.将目录指针向下移动一位 ch ...
- mysql——InnoDB 锁
https://www.cnblogs.com/leedaily/p/8378779.html 1.InnoDB锁的实现方式:给索引项加锁,只有通过索引条件检索数据,InnoDB才使用行级锁,否则,I ...
- [转]CSS自动换行后缩进
原文 https://blog.csdn.net/u011974797/article/details/71439794 例如: ●这是第一行太长了超出 显示到第二行 想实现的效果: ●这是第一行太长 ...
- .net reactor 加密混淆使用办法
https://www.cnblogs.com/bile/p/10250888.html 概述:安装了.net reactor之后,可以在安装目录下找到帮助文档REACTOR_HELP.chm,目前没 ...
- 【C++】char* 和 char[] 区别的理解
string 是一个类,其中有一个 char * 类型的私有变量. 因此可以如下构建一个string类型的变量. string str = "abcd"; 其中,右值“abcd”一 ...
- go语言系列--前言
我为什么要学golang语言 绝不是一时兴起,也不是人云亦云,这是我规划了很久的事了. 我曾自学过C语言,C++语言,Python语言,可都学的不精,原因我想是不知道为了什么而学的,可是这就是缺少学习 ...
- 源码阅读-Kingfisher
最后更新:2018-01-16 使用教程: 官方的链接 使用 Kingfisher 处理网络图片的读取与缓存 1. 开始使用 桥接 KingFisher, 利用 KingfisherCompatibl ...