在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. 模拟键盘鼠标事件有两种方法

    实现一个鼠标或者键盘模拟器,可以完成很多功能,比如做一个简单的游戏外挂^_^.通常,模拟键盘鼠标事件有两种方法: 1.keybd_event, mouse_event 2.SendMessage, P ...

  2. js循环添加事件的两种方法

    js循环添加事件的两种方法 选择下拉列表中的一个li将文本传到框中 问题:写此二级菜单时用到的方法不好,对此进行优化 原始js代码: <script>// 思路:1.点击下拉框a时,ul中 ...

  3. Android实现双击事件的两种方式

    Work around的方法是先监听onTouch事件来监听连续点击次数,每次点击都布置一个间隔时间的延时任务,延时任务执行时判断间隔内是否还有点击,如果没有则发布点击次数,重置计数. 实现代码如下: ...

  4. 在Activity中响应ListView内部按钮的点击事件的两种方法

    转载:http://www.cnblogs.com/ivan-xu/p/4124967.html 最近交流群里面有人问到一个问题:如何在Activity中响应ListView内部按钮的点击事件,不要在 ...

  5. plupload上传插件绑定事件的两种方法

    在经受一天的磨难之后终于找到处理事件方法: 先引用: <script src="js/plupload.full.min.js" type="text/javasc ...

  6. vue项目中 img标签加载失败方法,onerror事件的两种方法

    vue项目中 img标签加载失败方法 ?css 第一种方法 第二种方法 本人写的第一篇文章,希望对你有帮助 第一种方法 < img src="123" :οnerrοr=&q ...

  7. Cocos Creator 为Button添加事件的两种方法

    Button添加事件 Button 目前只支持 Click 事件,即当用户点击并释放 Button 时才会触发相应的回调函数. 通过脚本代码添加回调 方法一 这种方法添加的事件回调和使用编辑器添加的事 ...

  8. 【js】绑定事件的两种方法

    方法一: 为需要绑定事件的标签添加一个属性onclick 代码实现: <input type="button" value="测试按钮" onclick= ...

  9. js删除指定html及子标签,js中如何删除某个元素下面的所有子元素?(两种方法)...

    js中如何删除某个元素下面的所有子元素?(两种方法) 一.总结 方法一:通过元素的innerHTML属性 元素element.innerHTML=""; 方法二:通过元素的remo ...

最新文章

  1. 怎样训练左右手协调_2019中考体育训练计划
  2. 系统管理找不到请求的服务器,解决Win10无法打开软件提示服务器没有及时响应或控制请求的方法...
  3. Mac 下隐藏显示隐藏文件
  4. 答复审稿人的10条简易法则,你都学会了吗?
  5. Slog57_玩转NPM之NPM_package的制作发布和使用
  6. C#中使用FFMPEG切割、合并视频。
  7. html的article标签,介绍一个html5做的网站,以及article标签的用法
  8. lepus监控oracle数据库_实用脚本一键监控oracle数据库索引使用状况
  9. C++11 现代C++风格的新元素--简介
  10. 怎么获取c++股票数据接口?
  11. 阈值分割 Threshold(阈值)算子
  12. Excel中怎么添加批注
  13. vos系统是什么?vos网络电话系统怎样搭建?
  14. PDD卖百度网盘超级会员,是怎么做到销量10万+的?
  15. 高仿凤凰新闻的加载效果
  16. 华为网管地址配置实验
  17. Webrtc 多人视频会议系统 服务器 Licode 介绍
  18. 二分查找的迭代算法和递归算法
  19. spring boot +vue用什么记录登录状态_2019年web前端Vue面试题总结
  20. java学习资源第二弹,持续更新方便你我

热门文章

  1. 在Delphi程序中操作注册表
  2. 斯坦德机器人收购_斯坦德机器人合伙人兼CMO王茂林:人是公司发展根本,多数企业都死于合伙人...
  3. java 为什么有匿名类_全面了解Java中的内部类和匿名类
  4. java socket超时时间_java中socket 默认超时时间 | 学步园
  5. 如何制作linux文件系统,linux文件系统制作(一)
  6. 全向飞行器的设计与制作-学生初步汇报内容
  7. PaddlePaddle 中的若干基础命令中的问题
  8. 2021年人工神经网络第一次作业要求
  9. 2021年春季学期-信号与系统-第十五次作业参考答案-第七小题参考答案
  10. 使用小型变压器的线圈设计实验磁标初步实验