Cocos2d-x处理双击事件的两种方法!

Cocos2d-x 处理双击事件的两种方法 在cocos2d-x的开发过程中有些时候也是需要用到双击的事件处理,那么由于在cocos2d-x中没有实现对双击的事件的处理,那么我们就需要自己用代码实现。 下面介绍两种方式实现双击事件的处理。 (一)方法一 第一种方法就是利用两次touch之间的时间间隔来判定是单击或者是双击,一般来说,双击,两次touch之间的时间间隔为250ms~300ms(毫秒)。所以利用这个条件就可以对双击 阅读详情

在 Cocos2d-x的开发过程中有些时候也是需要用到双击的事件处理,那么由于在cocos2d-x中没有实现对双击的事件的处理,那么我们就需要自己用代码实现。

下面介绍两种方式实现双击事件的处理。

(一)方法一

第一种方法就是利用两次touch之间的时间间隔来判定是单击或者是双击,一般来说,双击,两次touch之间的时间间隔为250ms~300ms(毫秒)。所以利用这个条件就可以对双击进行判断处理了。

注意到由于要获取两次touch之间的touch时间,而且是以毫秒为单位,所以需要用到下面这个方法:

1
2
3
4
5
6
7
//获取系统的毫秒时间
long millisecondNow()
{
    struct cc_timeval now;
    CCTime::gettimeofdayCocos2d(&now, NULL);
    return (now.tv_sec * 1000 + now.tv_usec / 1000);
}

由于要获取两次touch的时间,所以要定义两个long类型的变量用于记录时间;而且定义了一个bool类型的变量记录是否是双击。

1
2
3
long preTime;
long nextTime;
bool isClickTwo;</font></font>
初始化为:
1
2
3
preTime = 0.0f;
nextTime = 0.0f;
isClickTwo  = false;
接着就是要在  ccTouchesBegan( CCSet * touches, CCEvent * event) 这个方法中(注意要在began这个方法中进行,而非ended这个方法中)进行单击和双击的判断处理了。代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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。

1
bool clicked;
初始化为:
1
clicked = false;
处理的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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");
    }
}
同样还是在终端中输出是单击还是双击的信息。

通过比较二者实现的方法可以看到,其实二者的实现过程还是有点类似的,只不过判断单击,双击的具体实现过程有点差异,在实际使用过程中建议是使用第二种方法,比较简洁。

转自:http://cocos2d.9tech.cn/news/2014/0324/40088.html

Cocos2d-js单击与双击事件处理:从原理到实战的完整解决方案 在游戏开发中,事件处理是构建交互逻辑的核心基础,它直接关系到用户体验的流畅性与准确性。其原理在于系统底层的事件传播机制,如事件冒泡与捕获,以及如何通过时间阈值和状态机来精确管理用户输入。这项技术的价值在于能够有效避免操作冲突,提升交互的可靠性和响应速度,尤其在需要区分不同点击行为的场景中至关重要。常见的应用场景包括游戏中的角色控制、UI按钮响应以及各类需要精准输入的操作界面。本文聚焦于Cocos2d-js框架下的具体实现,针对开发中常见的“幽灵单击”问题,提供了从事件流分析到状态机设计的健壮解决方案,并深入 阅读详情

相关推荐

Cocos2d-js实现单击与双击事件教程

Cocos2d-js是Cocos2d-x家族中的一个分支,它是一个使用JavaScript语言编写的开源游戏开发框架。该框架支持跨平台开发,使得开发者可以使用同一套代码库在多个平台上发布游戏,包括浏览器、iOS、Android、Windows、Mac等。单击事件指的是用户通过鼠标点击或触摸屏轻触来激活界面元素的事件。在游戏开发中,单击事件广泛应用于选择菜单项、控制角色移动、触发游戏事件等场景。由于它的操作直观和简便,单击事件在移动游戏和网页游戏中尤其流行。

weixin_42437253的博客 1042

cocos creator 实现双击 长按 单击

cocos creator 实现双击 长按 单击

weixin_45105704的博客 1149

cocos2d-x手势识别(单击、双击、各形状)

cocos2d-x手势识别(单击、双击、各形状)形状可根据需求自定义

cocos creator主程入门教程(一)—— 初识creator

我们在cocos creator新建一个Hello TypeScript项目,都会有一个assets/Scene/helloworld.fire文件。使用cocos creator开发游戏时,项目可以只有一个.fire文件。一般地,我会把这个文件夹改名为assets/scene,下面只有main.fire文件:assets/scene/main.fire。 双击main.fire文件,在层级管理器可以看到它的结构, 根节点是一个Canvas,点击Canvas节点,在右边的属性面板可以看到C.

houjia159的专栏 2118

cocos2d-js实现单击、双击

1、实现了cocos2d-js中的单击、双击,代码简单。 2、开发工具:webstorm 2017.2 3、如有疑问请留言~

cocos2d-x 双指缩放,单指拖动,双击自动放大地图

cocos2d-x 地图双指缩放,单指拖动,双击自动放大

cocos creator 实现双击判断

cocos creator 实现双击判断 接触cocos creator 没多久,今天需要实现一个双击判定 然后执行相应操作的的功能,自己尝试写了一下 感觉简单易实现 po上部分代码(我的creator版本V2.0.9),写在onload里了 供参考: onLoad: function (){ var self = this; this.Timearray = [],//存放时间的数组 sel...

qq_30272117的博客 1581

YOLOv8验证的命令以及计算coco指标

好久不看代码,都不知道怎么验证的了,来记录一下。1、计算coco指标。

毕竟是Shy哥 1479

Cocos Creator 3.0 基础——事件系统

触摸事件 触摸事件指的是用户手指触摸时候的事件 键盘事件 键盘事件指的是用户在键盘上输入的事件,他可以同时按下多个键盘,并要完成多个事件的响应 监听键盘wasd,控制人物往前后左右运动 触发事件 触发事件属于两个物体触碰后触发,其事件触发的前提触发事件类型 碰撞事件 碰撞事件属于两个物体碰撞后触发,其事件触发的前提触发事件类型.........

点击置顶文章查看博客目录(全站式导航) 4149

【STM32】BLDC驱动&控制开发笔记 | 07_SPI通信测试 - STM32F407用SPI配置DRV8323驱动芯片

使用STM32F407的SPI通信功能配置DRV8323S驱动芯片的详细过程说明。

这里是 F菌的进阶之路。 6288

TC397 EB配置ADC软件触发:从零实现周期采样与中断处理

本文详细介绍了如何在Infineon AURIX TC397芯片上使用EB Tresos工具配置ADC软件触发,实现周期采样与中断处理。通过硬件连接、EB模块配置、代码初始化及数据处理的全流程解析,帮助开发者快速掌握ADC软件触发技术,提升嵌入式系统开发效率。

root9的博客 229

cocos creator学习笔记 十分详细

property(“数据类型”):写在属性定义的上一行,属性就会出现在属性面板,使用基本数据类型时可以省略数据类型脚本将属性显示在属性面板上,可以很方便的调节属性而不需要改变代码,使得代码可以满足不同的需求,很好的实现复用。

thdlrt的博客 6406

玩转肺癌目标检测数据集Lung-PET-CT-Dx ——①从TCIA获取影像数据集

该目标检测公共数据集源自 The Cancer Imaging Archive(TCIA),是肿瘤研究方面的著名的医学影像公开数据库。 数据以 DICOM 格式存储,由肺癌受试者的 CT 和 PET-CT DICOM 图像组成。

takedachia的博客 1万+

Cocos2d-x 处理双击事件的两种方法

在cocos2d-x的开发过程中有些时候也是需要用到双击的事件处理,那么由于在cocos2d-x中没有实现对双击的事件的处理,那么我们就需要自己用代码实现。 下面介绍两种方式实现双击事件的处理。 (一)方法一 第一种方法就是利用两次touch之间的时间间隔来判定是单击或者是双击,一般来说,双击,两次touch之间的时间间隔为250ms~300ms(毫秒)。所以利用这个条件就可以对...

weixin_30706507的博客 137

【驭风计划 机器学习】实验6 基于集成学习的 Amazon 用户评论质量预测

¶随着电商平台的兴起,以及疫情的持续影响,线上购物在我们的日常生活中扮演着越来越重要的角色。在进行线上商品挑选时,评论往往是我们十分关注的一个方面。然而目前电商网站的评论质量参差不齐,甚至有水军刷好评或者恶意差评的情况出现,严重影响了顾客的购物体验。因此,对于评论质量的预测成为电商平台越来越关注的话题,如果能自动对评论质量进行评估,就能根据预测结果避免展现低质量的评论。本案例中我们将基于集成学习的方法对 Amazon 现实场景中的评论质量进行预测。

Mege1的博客 471

YOLOv8【第九章:模型部署篇·第2节】一文搞懂,模型剪枝与压缩技术!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 1523

Cocos2d-x 处理双击事件+CCBezierBy

在cocos2d-x的开发过程中有些时候也是需要用到双击的事件处理,那么由于在cocos2d-x中没有实现对双击的事件的处理,那么我们就需要自己用代码实现。 下面介绍两种方式实现双击事件的处理。 (一)方法一       第一种方法就是利用两次touch之间的时间间隔来判定是单击或者是双击,一般来说,双击,两次touch之间的时间间隔为250ms~300ms(毫秒)。所以利用这个条件就可

u013321328的专栏 486

MacBook Air老本重装系统

手里的这个本子型号是A1466,cpu i5,4G内存,硬盘ssd 120G。 重装系统可以在原系统上升级到更新版本,或者用U盘安装。 先确定,这个本子可以安装什么系统。 最权威的信息当然是apple的官网,地址:https://support.apple.com/zh-cn/HT211683 在“检查兼容性”中,可以依次检查每个系统兼容的硬件型号。Mojave是A1466能安装的最高版本。 确认兼容性后,下一步就是下载安装文件。还是这个页面稍下面一点可以找到。 这里告诉用户文件可以在什

bigwood99的博客 2万+
上一篇: Cocos2d-x项目过程中遇到的一些问题总结
下一篇: mqtt 学习----网站记录
tspangle
博客等级 码龄19年 81粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值