单选多选(CocosCreator)
推荐阅读:
1.前沿
首先来说说我们的需求吧:随机出现单选题或者多选题,完全回答正确才算正确(多选题中少选错选算错),核实答案的正确性,某个选项选择正确出现选项正确标志,某个选项选择错误出现错误标志(选项错误包括单选中选择错误的选项;多选中未选择的选项)。
2.UI界面
下面,先来实现单选多选界面:
单选:

为singleAnswer添加ToggleGroup组件

为每个option选项天机Toggle组件,并制定组为SingleAnswer

多选:多选只需要在单选的基础上去掉ToggleGroup组件,并删掉每个option的所属组。
3.获取用户答案
代码判断用户选择的选项,并将其保存在数组中:
submitAnswer() {
var self = this;
let answerArr = [];
if (self.isSingle) {
for (let i = 0; i < self.uiRoot.singleOptions.length; i++) {
let isSelect = self.uiRoot.singleOptions[i].getComponent(cc.Toggle).isChecked;
if (isSelect) {
answerArr.push(i);
}
}
cc.log("我的单选答案==", answerArr);
}
else {
for (let i = 0; i < self.uiRoot.mulOptions.length; i++) {
let isSelect = self.uiRoot.mulOptions[i].getComponent(cc.Toggle).isChecked;
if (isSelect) {
answerArr.push(i);
}
}
cc.log("我的多选答案==", answerArr);
}
self.checkAnswer(answerArr);
},
原理是判断每个选项的Toggle组件中的IsChecked的布尔值,true(选择),false(未选择)
4.显示答题结果
根据正确答案来显示对应的图标:
//验证答案是否正确
checkAnswer(answerArr) {
var self = this;
self.right = [0,1,2];//正确答案
if (self.isSingle) {
if (answerArr[0] == self.right[0]) {
cc.find("option" + (answerArr[0] + 1) + "/right" + (answerArr[0] + 1), self.uiRoot.singleAnswer).active = true;//显示正确的
} else {
cc.find("option" + (self.right[0] + 1) + "/right" + (self.right[0] + 1), self.uiRoot.singleAnswer).active = true;//显示正确答案
cc.find("option" + (answerArr[0] + 1) + "/error" + (answerArr[0] + 1), self.uiRoot.singleAnswer).active = true;//显示错误选项的标志
}
} else {
for (let i = 0; i < self.uiRoot.mulAnswer.children.length; i++) {
if (self.right.indexOf(i) > -1) {
//包含
cc.find("option" + (i + 1) + "/right" + (i + 1), self.uiRoot.mulAnswer).active = true;
} else if (answerArr.indexOf(i) > -1) {
cc.find("option" + (i + 1) + "/error" + (i + 1), self.uiRoot.mulAnswer).active = true;
}
}
}
answerArr=answerArr.sort();
if (JSON.stringify(answerArr) == JSON.stringify(self.right)) {
//最终答案正确
cc.find("finalRight", self.uiRoot.question).active=true;
cc.find("finalError", self.uiRoot.question).active=false;
}else
{
cc.find("finalRight", self.uiRoot.question).active=false;
cc.find("finalError", self.uiRoot.question).active=true;
}
},
判断原理是判断用户的答案数组中元素是否和正确答案中的元素相等。
单选题实现简单,只需要判断数组中第一个元素是否相等;多选题就比较复杂,具体方法是:为了避免用户数组中答案与正确答案顺序不同,需要先将用户答案数组进行排序用户答案数组.sort();然后使用JSON.stringify将数组转换未字符串比较。
单选多选(CocosCreator)的更多相关文章
- [SAP ABAP开发技术总结]选择屏幕——按钮、单选复选框
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- SpinnerViewPop【PopWindow样式(单选)、Dialog样式(单选+多选)的下拉菜单】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 对下拉菜单的文本区域和列表区域进行了封装.包括两种展现方式:popwindow(单选).dialog(单选+多选) 因为该封装需要在 ...
- 微信小程序button选中改样式-实现单选/多选
小程序实现多button单选/多选 红色为选中状态 单选 多选 ①wxss /* pages/button-select/button-select.wxss */ .button_container ...
- 简单的纯css重置input单选多选按钮的样式--利用伪类
由于input单选多选的原生样式通常都不符合需求,所以在实现功能时通常都需要美化按钮 html <input type="radio" /> <input typ ...
- android 实现调查问卷-单选-多选
非常久没写东西了.今天来总结下有关android调查问卷的需求实现. 转载请加地址:http://blog.csdn.net/jing110fei/article/details/46618229 先 ...
- 微信小程序 修改(自定义) 单选/复选按钮样式 checkbox/radio样式自定义
参考文章: 微信小程序 修改(自定义) 单选/复选按钮样式 checkbox/radio样式自定义
- 个人永久性免费-Excel催化剂功能第58波-批量生成单选复选框
插件的最大威力莫过于可以把简单重复的事情批量完全,对日常数据采集或打印报表排版过程中,弄个单选.复选框和用户交互,美观的同时,也能保证到数据采集的准确性,一般来说用原生的方式插入单选.复选框,操作繁琐 ...
- vue实现功能 单选 取消单选 全选 取消全选
vue实现功能 单选 取消单选 全选 取消全选 代码部分 <template> <div class=""> <h1>全选框</h1> ...
- XtraGrid RepositoryItemCheckEdit 显示状态以及单选多选问题
RepositoryItemCheckEdit默认有三种状态,选中状态.未选中状态和半选中状态(半选中状态通常用在TreeList中如果父节点下的子节点有选中的有未选中的,则父节点状态为半选中状态). ...
随机推荐
- 常用socket函数详解
常用socket函数详解 关于socket函数,每个的意义和基本功能都知道,但每次使用都会去百度,参数到底是什么,返回值代表什么意义,就是说用的少,也记得不够精确.每次都查半天,经常烦恼于此.索性都弄 ...
- bootstrap-treeview后台Json数据的封装及前台的显示
1.bootStrap-treeview是我们常用的树形结构,页面风格也比较清新,但是后台数据的封装比较麻烦,经过研究终于解决,和大家分享一下. 2.前端代码如下 <script> var ...
- RestClient测试
1,对象里面包含集合及字符串属性 {"roloeList":[{ "id":10001,"areaid":1,"name" ...
- vue中el-upload上传多图片且携带参数,批量而不是一张一张的解决方案
现在前端基本不是vue技术栈就是react技术栈. vue技术栈最常用的就是element-ui的ui框架了. 在项目中,我们经常会碰到这种需求:批量上传文件 element-ui 确实也为我们提供了 ...
- 【Intellij IDEA】设置 jdk 版本
File -> Project Structure... -> Project,如图所示:
- vue-cli3.0创建项目报npm install --loglevel error 踩坑的那把辛酸泪
创建项目 vue create vue-pro 然后如下图 一开始以为是npm的问题,卸载了Mac的node ,安装nvm,然后再安装node (可参考: Mac中nvm的安装和使用 https: ...
- 9-1、大型项目的接口自动化实践记录----数据库结果、JSON对比
上一篇写了如何从DB获取预期.实际结果,这一篇分别对不同情况说下怎么进行对比. PS:这部分在JSON对比中也适用. 1.结果只有一张表,只有一条数据 数据格式:因为返回的是dicts_list的格式 ...
- Axis1.4 配置数组类型复杂对象
最近 项目对接 webservice,要求SOAP 标准是1.1,然后在axis 和 spring ws 和 cxf 之间进行选择,然后axis 可以自定义服务,然后随tomcat启动发布,sprin ...
- JavaScript的event对象
JavaScript的event对象中 event.target指代的是:触发事件的元素 event.currentTarget指代的是:事件绑定的元素 <!DOCTYPE html> & ...
- 【游记】NOIP2019初赛
声明 我的游记是一个完整的体系,如果没有阅读过往届文章,阅读可能会受到障碍. ~~~上一篇游记的传送门~~~ 前言 (编辑中) 文章推荐:[游记]NOIP2019复赛