Cocos2d-x 处理双击事件的两种方法
在cocos2d-x的开发过程中有些时候也是需要用到双击的事件处理,那么由于在cocos2d-x中没有实现对双击的事件的处理,那么我们就需要自己用代码实现。
下面介绍两种方式实现双击事件的处理。
(一)方法一
第一种方法就是利用两次touch之间的时间间隔来判定是单击或者是双击,一般来说,双击,两次touch之间的时间间隔为250ms~300ms(毫秒)。所以利用这个条件就可以对双击进行判断处理了。
注意到由于要获取两次touch之间的touch时间,而且是以毫秒为单位,所以需要用到下面这个方法:
//获取系统的毫秒时间
long millisecondNow()
{struct cc_timeval now;CCTime::gettimeofdayCocos2d(&now, NULL);return (now.tv_sec * 1000 + now.tv_usec / 1000);
}
由于要获取两次touch的时间,所以要定义两个long类型的变量用于记录时间;而且定义了一个bool类型的变量记录是否是双击。
long preTime;long nextTime;bool isClickTwo;
初始化为:
preTime = 0.0f;nextTime = 0.0f;isClickTwo = false;
接着就是要在 ccTouchesBegan( CCSet * touches, CCEvent * event) 这个方法中(注意要在began这个方法中进行,而非ended这个方法中)进行单击和双击的判断处理了。代码如下:
void HelloWorld::ccTouchesBegan(CCSet* touches, CCEvent* event)
{isClickTwo = false;nextTime = millisecondNow();if ((nextTime - preTime < 300) && (nextTime - preTime > 50)) {CCLog("double click");isClickTwo = true;}//在回调方法中处理单击事件scheduleOnce(schedule_selector(HelloWorld::ff), 0.25f);preTime = millisecondNow();
}void HelloWorld::ff(float tt)
{if (! isClickTwo) {CCLog("single click");}
}
这样,你单击和双击屏幕的时候就会在终端输出是单击还是双击了。
(二)方法二
下面这种方法较第一种方法而言,比较简洁,其并不是采用直接比较双击中两次touch的时间间隔,而是比较巧妙的解决这个问题。解决的思路是这样的,我们知道双击的时间间隔是0.25ms,所以设置了一个延时为0.25ms的schedule,如果在这0.25ms中又touch,那么表示的是双击,否则表示的是单击。具体的实现过程看代码实现,应该是可以理解的。
这种方法只需要使用到一个bool变量表征是否touch。
bool clicked;
初始化为:
clicked = false;
处理的代码如下:
void HelloWorld::ccTouchesBegan(CCSet* touches, CCEvent* event)
{if (clicked) {clicked = false;CCLog("double click");}else{//延时0.25s执行(注意在这0.25s的延时过程中clicked已经为true),//如果在这个过程中再次click,那么就执行上面的双击事件处理了//否则,那么就执行下面的回调函数了,处理单击事件scheduleOnce(schedule_selector(HelloWorld::ff), 0.25f);clicked = true;}
}//在回调函数中处理单击事件
void HelloWorld::ff(float tt)
{if (clicked) {clicked = false;CCLog("single click");}
}
同样还是在终端中输出是单击还是双击的信息。
通过比较二者实现的方法可以看到,其实二者的实现过程还是有点类似的,只不过判断单击,双击的具体实现过程有点差异,在实际使用过程中建议是使用第二种方法,比较简洁。
Cocos2d-x 处理双击事件的两种方法相关推荐
- 模拟键盘鼠标事件有两种方法
实现一个鼠标或者键盘模拟器,可以完成很多功能,比如做一个简单的游戏外挂^_^.通常,模拟键盘鼠标事件有两种方法: 1.keybd_event, mouse_event 2.SendMessage, P ...
- js循环添加事件的两种方法
js循环添加事件的两种方法 选择下拉列表中的一个li将文本传到框中 问题:写此二级菜单时用到的方法不好,对此进行优化 原始js代码: <script>// 思路:1.点击下拉框a时,ul中 ...
- Android实现双击事件的两种方式
Work around的方法是先监听onTouch事件来监听连续点击次数,每次点击都布置一个间隔时间的延时任务,延时任务执行时判断间隔内是否还有点击,如果没有则发布点击次数,重置计数. 实现代码如下: ...
- 在Activity中响应ListView内部按钮的点击事件的两种方法
转载:http://www.cnblogs.com/ivan-xu/p/4124967.html 最近交流群里面有人问到一个问题:如何在Activity中响应ListView内部按钮的点击事件,不要在 ...
- plupload上传插件绑定事件的两种方法
在经受一天的磨难之后终于找到处理事件方法: 先引用: <script src="js/plupload.full.min.js" type="text/javasc ...
- vue项目中 img标签加载失败方法,onerror事件的两种方法
vue项目中 img标签加载失败方法 ?css 第一种方法 第二种方法 本人写的第一篇文章,希望对你有帮助 第一种方法 < img src="123" :οnerrοr=&q ...
- Cocos Creator 为Button添加事件的两种方法
Button添加事件 Button 目前只支持 Click 事件,即当用户点击并释放 Button 时才会触发相应的回调函数. 通过脚本代码添加回调 方法一 这种方法添加的事件回调和使用编辑器添加的事 ...
- 【js】绑定事件的两种方法
方法一: 为需要绑定事件的标签添加一个属性onclick 代码实现: <input type="button" value="测试按钮" onclick= ...
- js删除指定html及子标签,js中如何删除某个元素下面的所有子元素?(两种方法)...
js中如何删除某个元素下面的所有子元素?(两种方法) 一.总结 方法一:通过元素的innerHTML属性 元素element.innerHTML=""; 方法二:通过元素的remo ...
最新文章
- 怎样训练左右手协调_2019中考体育训练计划
- 系统管理找不到请求的服务器,解决Win10无法打开软件提示服务器没有及时响应或控制请求的方法...
- Mac 下隐藏显示隐藏文件
- 答复审稿人的10条简易法则,你都学会了吗?
- Slog57_玩转NPM之NPM_package的制作发布和使用
- C#中使用FFMPEG切割、合并视频。
- html的article标签,介绍一个html5做的网站,以及article标签的用法
- lepus监控oracle数据库_实用脚本一键监控oracle数据库索引使用状况
- C++11 现代C++风格的新元素--简介
- 怎么获取c++股票数据接口?
- 阈值分割 Threshold(阈值)算子
- Excel中怎么添加批注
- vos系统是什么?vos网络电话系统怎样搭建?
- PDD卖百度网盘超级会员,是怎么做到销量10万+的?
- 高仿凤凰新闻的加载效果
- 华为网管地址配置实验
- Webrtc 多人视频会议系统 服务器 Licode 介绍
- 二分查找的迭代算法和递归算法
- spring boot +vue用什么记录登录状态_2019年web前端Vue面试题总结
- java学习资源第二弹,持续更新方便你我
热门文章
- 在Delphi程序中操作注册表
- 斯坦德机器人收购_斯坦德机器人合伙人兼CMO王茂林:人是公司发展根本,多数企业都死于合伙人...
- java 为什么有匿名类_全面了解Java中的内部类和匿名类
- java socket超时时间_java中socket 默认超时时间 | 学步园
- 如何制作linux文件系统,linux文件系统制作(一)
- 全向飞行器的设计与制作-学生初步汇报内容
- PaddlePaddle 中的若干基础命令中的问题
- 2021年人工神经网络第一次作业要求
- 2021年春季学期-信号与系统-第十五次作业参考答案-第七小题参考答案
- 使用小型变压器的线圈设计实验磁标初步实验