在前两篇文章中,我们介绍了在注册场景中需要用到的输入框及弹出框的实现方式,这两篇文章中介绍的内容在登录场景同样会用到。而我们经常会在登录场景中见到的另一种元素就是自动登录或者记住密码的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. Codeforces Round #311 (Div. 2) C. Arthur and Table Multiset

    C. Arthur and Table Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/557/p ...

  2. 关于javascript中的 执行上下文和对象变量

    什么是执行上下文 当浏览器的解释器开始执行我们的js代码的时候,js代码运行所处的环境可以被认为是代码的执行上下文,执行上下文(简称-EC)是ECMA-262标准里的一个抽象概念,用于同可执行代码(e ...

  3. java Servlet接口及应用

    基本类和接口 一.javax.servlet.Servlet接口 servlet抽象集是javax.servlet.Servlet接口,它规定了必须由Servlet类实现由servlet引擎识别和管理 ...

  4. Replace INTO与INSERT INTO的不同之处

    Replace INTO和INSERT INTO的区别: REPLACE的运行与INSERT很相似.只有一点例外,假如表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有 ...

  5. shadow fight 1.6.0 内购

    shadow fight 之前的版本只需要安装LocallApstore即可内购. 1.6.0的版本中加了越狱检查. 所以LocallApstore 无法直接使用. 需要安装xcon避开越狱检查. 也 ...

  6. android stuido 在线安装svn插件,添加版本库无响应

    问题:android stuido 中在线安装svn插件,添加版本库无响应. 原因: 由于android stuido 版本较高,在线安装1.6x 版本的svn,添加版本库一直没有响应,最后卡死.. ...

  7. Java_Web使用简单的批处理操作

    之前进行Web开发的时候使用的是myeclipse,但只用过的人都知道,由于其插件太多,而且有很多插件的功能根本就接触不到.所以导致一旦工程稍微大一点就会很卡,虽然之前也对其进行优化过,但还是觉得不太 ...

  8. JAVA WEB 作用域之间的区别

    JAVA WEB 作用域 1.page属性范围(pageContext) a.在一个页面设置的属性,跳转到其他页面就无法访问了(包括重定向和). 示例:pageScopeDemo01.jsp < ...

  9. 自己调用NTDLL函数

    一.概述 在DLL初始化的时候有时不能调用其它系统DLL的函数,以免导致问题,但有时候又必须要调用怎么办?一种办法就是自己直接调用NTDLL接口,这样肯定没有问题. 下面我写个自己调用Registry ...

  10. Android小项目之二 代码的组织结构

    ------- 源自梦想.永远是你IT事业的好友.只是勇敢地说出我学到! ---------- 按惯例,写在前面的:可能在学习Android的过程中,大家会和我一样,学习过大量的基础知识,很多的知识点 ...