Cocos2d-x 处理双击事件+CCBezierBy
2015-12-21 17:49
585 查看
cocos2d-x 贝塞尔曲线的简单运用(CCBezierTo,CCBezierBy)
在cocos2d-x的开发过程中有些时候也是需要用到双击的事件处理,那么由于在cocos2d-x中没有实现对双击的事件的处理,那么我们就需要自己用代码实现。
下面介绍两种方式实现双击事件的处理。
(一)方法一
第一种方法就是利用两次touch之间的时间间隔来判定是单击或者是双击,一般来说,双击,两次touch之间的时间间隔为250ms~300ms(毫秒)。所以利用这个条件就可以对双击进行判断处理了。
注意到由于要获取两次touch之间的touch时间,而且是以毫秒为单位,所以需要用到下面这个方法:
由于要获取两次touch的时间,所以要定义两个long类型的变量用于记录时间;而且定义了一个bool类型的变量记录是否是双击。
初始化为:
接着就是要在 ccTouchesBegan(CCSet* touches,CCEvent* event) 这个方法中(注意要在began这个方法中进行,而非ended这个方法中)进行单击和双击的判断处理了。代码如下:
这样,你单击和双击屏幕的时候就会在终端输出是单击还是双击了。
(二)方法二
下面这种方法较第一种方法而言,比较简洁,其并不是采用直接比较双击中两次touch的时间间隔,而是比较巧妙的解决这个问题。解决的思路是这样的,我们知道双击的时间间隔是0.25ms,所以设置了一个延时为0.25ms的schedule,如果在这0.25ms中又touch,那么表示的是双击,否则表示的是单击。具体的实现过程看代码实现,应该是可以理解的。
这种方法只需要使用到一个bool变量表征是否touch。
初始化为:
处理的代码如下:
同样还是在终端中输出是单击还是双击的信息。
通过比较二者实现的方法可以看到,其实二者的实现过程还是有点类似的,只不过判断单击,双击的具体实现过程有点差异,在实际使用过程中建议是使用第二种方法,比较简洁。
![](http://s.jiathis.com/qrcode.php?url=http://www.tuicool.com/articles/iAb6ne?via=wechat_qr)
分享
在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"); } }
同样还是在终端中输出是单击还是双击的信息。
通过比较二者实现的方法可以看到,其实二者的实现过程还是有点类似的,只不过判断单击,双击的具体实现过程有点差异,在实际使用过程中建议是使用第二种方法,比较简洁。
分享
相关文章推荐
- Mac系统完美配置Cocos2d-x 2.2.3 的Android+IOS双平台环境
- cocos code IDE 自编译模拟器不能正确的运行以及断点调试连接IDE超时的解决方法
- 我的cocos2d-x集成sharesdk之旅(转)
- cocos2dx 3.x下cocosstudio使用
- Cocos2D & SpriteBuilder Developer Guide
- Cocos2d中获取锚点所在坐标的方法
- quick cocos使用shader给图片描边再挖空
- cocos2d-x 代码中使用 std::to_string 要注意!
- 如何在Windows 7平台搭建Android(eclipse) Cocos2d(c++)开发环境
- 【COCOS2DX-游戏开发之三十】抖动效果 CCShake
- cocos2d+sublime text2配置lua开发环境
- 【cocos2d-x 3.x 学习与应用总结】2: 在cocos2d-x中使用ccbi
- cocos2dx 动画 二(iOS)
- cocos2d-x3.1.1 集成luajit for arm64(转)
- 【COCOS2DX-LUA 脚本开发之十一】C/C++与Lua之间进行数据函数交互以及解决“PANIC: unprotected error in call to Lua API (转)
- 转-cocos2d-x之触屏时间详解
- 游戏引擎cocos2d-android使用大全
- 游戏引擎cocos2d-android使用大全
- 游戏引擎cocos2d-android使用大全
- 零碎收集cocos知识