在前两篇文章中,我们介绍了在注册场景中需要用到的输入框及弹出框的实现方式,这两篇文章中介绍的内容在登录场景同样会用到。而我们经常会在登录场景中见到的另一种元素就是自动登录或者记住密码的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. .NET连接SAP系统专题:C#调用RFC代码(三)

    本文就说明在C#中如何编写代码来调用SAP中的RFC函数获取数据. 首先需要引用两个NCO3.0的DLL DLL下载地址:http://files.cnblogs.com/mengxin523/SAP ...

  2. AIM Tech Round (Div. 2) C. Graph and String 二分图染色

    C. Graph and String 题目连接: http://codeforces.com/contest/624/problem/C Description One day student Va ...

  3. 怎样用JS来添加CSS样式

    方法: document.getElementById("xx").style.xxx中的全部属性是什么 盒子标签和属性对比 CSS语法(不区分大写和小写) JavaScript语 ...

  4. Android操作联系人 android开发教程

    Android系统中的联系人也是通过ContentProvider来对外提供数据的,我们这里实现获取所有联系人.通过电话号码获取联系人.添加联系人.使用事务添加联系人. 获取所有联系人 1. Andr ...

  5. 利用FluorineFx的ByteArray上传图片

    Flex端利用new PNGEncoder().encode(bitmapData)将png图片转换为ByteArray,然后传给服务器,服务端需要定义一个public ByteArray Uploa ...

  6. 【JavaScript】Registering JavaScript object methods as callbacks

    The registration of callback functions is very common in JavaScript web programming, for example to ...

  7. Perl小知识点之排序sort

    脚本这种东西,就是要常用,否则一段时间不用就生疏了,因此决定时时记一些小知识点,一来回顾一下,二来需要的时候可以迅速获得提示. Sort by number You could now write a ...

  8. Android学习笔记之JSON数据解析

    转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...

  9. vxworks 实时操作系统

    VxWorks 是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统.Tornado 是WRS 公司推出的一套实时操作系统开发环境,类似Mi ...

  10. LeetCode27 Remove Element

    题目: Given an array and a value, remove all instances of that value in place and return the new lengt ...