cocos2dx2.2.2登录场景中Checkbox选择框的实现
在前两篇文章中,我们介绍了在注册场景中需要用到的输入框及弹出框的实现方式,这两篇文章中介绍的内容在登录场景同样会用到。而我们经常会在登录场景中见到的另一种元素就是自动登录或者记住密码的Checkbox选择框。那么,接下来就让我们看看这个选择框如何实现。
首先,我们先看一下效果

我们需要的就是一个Checkbox选择框,后面加上“自动登录”或者其他的文字。效果就是点击选择框或文字时,Checkbox的状态会进行切换;同时在程序中还要知道当前选择框的状态,只要我们能够实现这几点,这个功能就完成了。
界面问题比较简单,我们只需要根据自己的图片素材和要展示的文字来摆放各元素的位置就可以了,我们可以把Checkbox和文字放到一个父元素中,然后再整体调整其位置。
至于切换效果,我们可以将两种效果图叠放到一起,然后通过设置元素是否可见来实现。而当前状态也可以根据元素是否可见来确定。现在,上面的几个问题都解决了。下面然我们来看一看实现代码。
CCCheckbox.h文件
#ifndef __MyGame__CCCheckbox__
#define __MyGame__CCCheckbox__ #include "cocos2d.h"
using namespace cocos2d; class CCCheckbox:public CCSprite{
public:
//创建checkbox
static CCSprite * create(const char * picNoSelect,const char * picSelect,const char * content ,int status = ); //点击操作
int click(); private:
//获取当前状态
int getStatus();
}; #endif /* defined(__MyGame__CCCheckbox__) */
CCCheckbox.cpp文件
#include "CCCheckbox.h"
#include "cocos2d.h" using namespace cocos2d; //创建,参数:未选中图片名,选中图片名,文字,状态(0-未选中,1-选中)
CCSprite * CCCheckbox::create(const char * picNoSelect, const char * picSelect, const char * content, int status)
{
CCSprite * sp = CCSprite::create(); //checkbox
CCSprite * sp_checkbox_select = CCSprite::create(picSelect);
CCSprite * sp_checkbox_noSelect = CCSprite::create(picNoSelect);
CCSize size_checkbox = sp_checkbox_noSelect->getContentSize(); //文字
CCLabelTTF * label_content = CCLabelTTF::create(content, "Arial", );
label_content->setColor(ccBLACK);
label_content->setHorizontalAlignment(kCCTextAlignmentLeft); //左对齐
CCSize size_content = label_content->getContentSize(); //缩放比例
float scale_h = size_checkbox.height / size_content.height; //缩放文字
label_content->cocos2d::CCNode::setScale(scale_h, scale_h); //最终大小
CCSize size = CCSize(size_checkbox.width * + size_content.width * scale_h , size_checkbox.height * 1.5);
sp->setContentSize(size); //设置checkbox状态
sp->addChild(sp_checkbox_noSelect);
sp->addChild(sp_checkbox_select);
sp_checkbox_noSelect->setPosition(CCPointMake(size_checkbox.width,size.height/));
sp_checkbox_select->setPosition(CCPointMake(size_checkbox.width,size.height/));
sp_checkbox_noSelect->setTag(); //不选中tag=0
sp_checkbox_select->setTag(); //选中tag=1 if (status == )
{
//设置未选中状态
sp_checkbox_noSelect->setVisible(true);
sp_checkbox_select->setVisible(false);
}
else
{
//设置选中状态
sp_checkbox_noSelect->setVisible(false);
sp_checkbox_select->setVisible(true);
} //设置文字位置
sp->addChild(label_content);
label_content->setAnchorPoint(CCPoint(,0.5));
label_content->setPosition(CCPointMake(size_checkbox.width * , size.height/)); return sp;
} //点击操作
int CCCheckbox::click()
{
int status = getStatus();
CCSprite * sp_checkbox_noSelect = (CCSprite *)(this->getChildByTag());
CCSprite * sp_checkbox_select = (CCSprite *)(this->getChildByTag()); if (status == )
{
status = ;//状态设置为选中
sp_checkbox_noSelect->setVisible(false);
sp_checkbox_select->setVisible(true);
}
else
{
status = ;//状态设置为未选中
sp_checkbox_noSelect->setVisible(true);
sp_checkbox_select->setVisible(false);
} return status;
} //获取当前状态,0-未选中,1-选中
int CCCheckbox::getStatus()
{
CCSprite * sp_checkbox_noSelect = (CCSprite *)(this->getChildByTag());
int status = ; //未选中
if (!sp_checkbox_noSelect->isVisible())
{
status = ;//选中
} return status;
}
下面是登录场景中使用Checkbox的代码
//自动登录
CCSprite * spriteAuto = CCCheckbox::create("checkbox_normal.png", "checkbox_select.png", "自动登录", );
CCMenuItemSprite * itemAuto = CCMenuItemSprite::create(spriteAuto, spriteAuto,this,menu_selector(LoginHandleLayer::clickCheckbox));
我们将Checkbox放到Menu中来触发其点击事件,相应的回调函数为
//点击checkbox
void LoginHandleLayer::clickCheckbox(CCObject * pSender)
{
CCLog("clickCheckbox"); CCMenuItemSprite * item = (CCMenuItemSprite *)pSender;
CCCheckbox * checkbox = (CCCheckbox *)(item->getNormalImage());
int status = checkbox->click(); CCLog("status:%d",status);
}
现在我们点击切换Checkbox时,可以看到输出的日志,正确得到了Checkbox的当前选择状态。

现在,我们就成功实现了选择框的状态切换功能。
cocos2dx2.2.2登录场景中Checkbox选择框的实现的更多相关文章
- 转:zTree树控件入门之checkbox:如何动态设置节点的checkbox选择框启用与禁用状态(chkDisabled)
当一棵树的部分节点根据登入用户角色不同而决定是否启用节点前的checkbox选择框的时候,我们应该如何做呢?也或者如何在页面加载的时候动态根据当前登入用户角色动态切换节点前的checkbox的禁用状态 ...
- 用jquery修改默认的单选框radio或者复选框checkbox选择框样式
默认的radio和checkbox选框很难看.我去看了一下qq注册的页面.发现单选和复选框并没有用<input>,居然是用是A标签.然后用css背景图片展示选择框,用JavaScript控 ...
- table中checkbox选择多行
页面代码 <table id="addressTable" class="ui-jqgrid-htable ui-common-table table table- ...
- JQuery中Checkbox选择
判断是否选中 $(this).is(":checked") 取消选中 $(this).prop("checked", false) 选中 $(this).pro ...
- 如何在vue+element中实现选择框和穿梭框的根据拼音以及拼音首字母以及汉字的模糊搜索
1.汉字: 直接添加对应的 filterable 2.拼音: 穿梭框和选择器的实现方式有所不同 选择器: <1>下载pinyin-match: npm i --save ...
- bootstrap-treeview 关于checkbox选择框不显示的问题
bootstrap-treeview.js 1.0.2 不支持checkbox,最后使用 bootstrap-treeview.js 1.2.0 解决此问题.
- checkbox选择框如果被选中value值就可以传过去,没有被选中value就不能穿过去(调试了近一天,坑爹的说)
因为要适合各种分辨率,所以将原来的单选按钮radio换成单个的checkbox
- 左右选择框 js插件
随着项目的进展,测试工程师在更多的浏览器中兼容性测试中,发现有些浏览器不支持option的触发事件,这就造成了先前一篇博文bootstrap 左右框多项选择示例 中左右选择框的失效,于是我就由原先的s ...
- [Unity3D]Unity3D游戏开发之在3D场景中选择物体并显示轮廓效果
大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei. 在<仙剑奇侠传>.<古剑奇谭>等游戏中,常常须要玩家在一个3D场景中 ...
随机推荐
- 【项目实例】使用C#开发纽曼USB来电通来电弹屏客户端小结
基于CRM客户和咨询者的普遍需求,老板决定在CRM系统上加入来电弹屏功能,所谓来电弹屏,就是当一个电话打入时,电脑会弹出该电话号码对应的客户.联系人或者供应商详细信息,如果是新号码,则添加一个新的客户 ...
- android编程之ExpandableListView使用总结
ExpandableListView这个类与其他android列表形式视图是比较类似的,看源码的话,可以知道它是多种视图组合而成.今天不分析源码,只写些使用心得. 1.Button 对,没错,就是 ...
- Shell脚本[运算表达式,条件控制语句]
#!/bin/bash #你值得收藏的四则表达式运算. val1=1 val2=1 val3=1 val4=1 val5=1 val6=1 val7=1 let val1++ ((val2++)) v ...
- PHP中header用法详解带范例(转)
header的用法 header()函数的作用是:发送一个原始 HTTP 标头[Http Header]到客户端.标头 (header) 是服务器以 HTTP 协义传 HTML 资料到浏览器前所送出的 ...
- EJB究竟是什么,真的那么神奇吗??
1. 我们不禁要问,什么是"服务集群"?什么是"企业级开发"? 既然说了EJB 是为了"服务集群"和"企业级开发",那么 ...
- MR中的combiner和partitioner
1.combiner combiner是MR编程模型中的一个组件: 有些任务中map可能会产生大量的本地输出,combiner的作用就是在map端对输出先做一次合并,以减少map和reduce节点之间 ...
- java对象创建过程
1.jvm找到class文件路径. 2.jvm载入class文件,静态初始化,创建一个class对象. 3.为即将创建的对象分配内存空间. 4.对分配的空间进行清零,例如:int清除为0,boolea ...
- 【Shell脚本学习5】第一个Shell脚本
打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用php写shell 脚本,扩展名就用php好了. 输入一些代码: #!/bin/bash ...
- Android 常用 adb 命令
查看原文:http://blog.csdn.net/u010818425/article/details/52266593 (一)基础操作 安装app adb install -r xxx.apk / ...
- mina 字节数组编解码器的写法 I
mina 服务器与 mina 客户端通讯的话, 一.传递 String 时编解码工厂使用 mina 自带的 TextLineCodecFactory 即可: 二.传递 java 对象或 byte[] ...