在前两篇文章中,我们介绍了在注册场景中需要用到的输入框及弹出框的实现方式,这两篇文章中介绍的内容在登录场景同样会用到。而我们经常会在登录场景中见到的另一种元素就是自动登录或者记住密码的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选择框的实现的更多相关文章

  1. 转:zTree树控件入门之checkbox:如何动态设置节点的checkbox选择框启用与禁用状态(chkDisabled)

    当一棵树的部分节点根据登入用户角色不同而决定是否启用节点前的checkbox选择框的时候,我们应该如何做呢?也或者如何在页面加载的时候动态根据当前登入用户角色动态切换节点前的checkbox的禁用状态 ...

  2. 用jquery修改默认的单选框radio或者复选框checkbox选择框样式

    默认的radio和checkbox选框很难看.我去看了一下qq注册的页面.发现单选和复选框并没有用<input>,居然是用是A标签.然后用css背景图片展示选择框,用JavaScript控 ...

  3. table中checkbox选择多行

    页面代码 <table id="addressTable" class="ui-jqgrid-htable ui-common-table table table- ...

  4. JQuery中Checkbox选择

    判断是否选中 $(this).is(":checked") 取消选中 $(this).prop("checked", false) 选中 $(this).pro ...

  5. 如何在vue+element中实现选择框和穿梭框的根据拼音以及拼音首字母以及汉字的模糊搜索

    1.汉字: 直接添加对应的 filterable     2.拼音: 穿梭框和选择器的实现方式有所不同   选择器:   <1>下载pinyin-match:   npm i --save ...

  6. bootstrap-treeview 关于checkbox选择框不显示的问题

    bootstrap-treeview.js  1.0.2 不支持checkbox,最后使用 bootstrap-treeview.js  1.2.0 解决此问题.

  7. checkbox选择框如果被选中value值就可以传过去,没有被选中value就不能穿过去(调试了近一天,坑爹的说)

    因为要适合各种分辨率,所以将原来的单选按钮radio换成单个的checkbox

  8. 左右选择框 js插件

    随着项目的进展,测试工程师在更多的浏览器中兼容性测试中,发现有些浏览器不支持option的触发事件,这就造成了先前一篇博文bootstrap 左右框多项选择示例 中左右选择框的失效,于是我就由原先的s ...

  9. [Unity3D]Unity3D游戏开发之在3D场景中选择物体并显示轮廓效果

    大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei. 在<仙剑奇侠传>.<古剑奇谭>等游戏中,常常须要玩家在一个3D场景中 ...

随机推荐

  1. HDU 5578 Friendship of Frog 水题

    Friendship of Frog Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.ph ...

  2. Codeforces Round #260 (Div. 1) C. Civilization 并查集,直径

    C. Civilization Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/455/probl ...

  3. DB2数据库性能优化介绍

    DB2数据库性能优化介绍 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 前段时间,我从CSDN得到了这本书<DB2数据库性能调整和优化(第2版)& ...

  4. 各种ORM安装

    1.EF安装 2.PetaPoco安装 Install-Package PetaPoco 3.

  5. Parse--Saving Images(翻译)

    原文地址:https://www.parse.com/tutorials/saving-images 学习如何创建一个关于允许用户拍照和上传到parse.com的APP 源码地址:https://gi ...

  6. 快速排序算法-C语言实现

    注:本篇内容为翻译,之所以选择这篇进行翻译原因是该文章含有动画,能够更加直观地展示快速排序.同时,可以仔细看一下代码,代码中把结构化的思想给予了更加充分地表现.按照功能进行模块划分的思想得到了彻底地贯 ...

  7. 分享十个CSS3鼠标滑过文字动画特效

    介绍10组基于CSS3的鼠标滑过文字动画特效,有上凸.下凹等文字动画.这些炫酷的CSS3文字效果可以让网页变得更加绚丽.效果图如下: 在线预览   源码下载 实现的代码. html代码: <h2 ...

  8. LeetCode12 Integer to Roman

    题意: Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from ...

  9. 转 如何使用velocity模板引擎开发网站

    基于 Java 的网站开发,很多人都采用 JSP 作为前端网页制作的技术,尤其在是国内.这种技术通常有一些问题,我试想一下我们是怎样开发网站的,通常有几种方法: 1:功能确定后,由美工设计网页的UI( ...

  10. iOS uiscrollView 嵌套 问题 的解决

    苹果官方文档里面提过,最好不要嵌套scrollView,特别提过UITableView和UIWebView,因为在滑动时,无法知道到底是希望superScrollView滑动还是subScrollVi ...