我的电信光纤怎么收费收费合理吗

cocos(255)
分类:&&1435人阅读&&&
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1551896次
积分:19503
积分:19503
排名:第383名
原创:80篇
转载:1878篇
评论:112条
(1)(1)(24)(16)(43)(27)(7)(54)(12)(48)(18)(13)(6)(4)(64)(2)(1)(3)(28)(56)(51)(59)(16)(44)(12)(4)(84)(70)(60)(84)(63)(14)(10)(68)(73)(84)(10)(9)(44)(91)(41)(116)(153)(180)(101)(3)Cocos2d-x 处理双击事件的两种方法
在cocos2d-x的开发过程中有些时候也是需要用到双击的事件处理,那么由于在cocos2d-x中没有实现对双击的事件的处理,那么我们就需要自己用代码实现。
下面介绍两种方式实现双击事件的处理。
(一)方法一
第一种方法就是利用两次touch之间的时间间隔来判定是单击或者是双击,一般来说,双击,两次touch之间的时间间隔为250ms~300ms(毫秒)。所以利用这个条件就可以对双击进行判断处理了。
注意到由于要获取两次touch之间的touch时间,而且是以毫秒为单位,所以需要用到下面这个方法:
//获取的毫秒时间&&
long millisecondNow()&
&&& struct cc_&
&&& CCTime::gettimeofdayCocos2d(&now, NULL);&
&&& return (now.tv_sec * 1000 + now.tv_usec / 1000);&
//获取系统的毫秒时间
long millisecondNow()
&&& struct cc_
&&& CCTime::gettimeofdayCocos2d(&now, NULL);
&&& return (now.tv_sec * 1000 + now.tv_usec / 1000);
由于要获取两次touch的时间,所以要定义两个long类型的变量用于记录时间;而且定义了一个bool类型的变量记录是否是双击。
long preT&
&&& long nextT&
&&& bool isClickT&
&&& long nextT
&&& bool isClickT
初始化为:
preTime = 0.0f;&
&& nextTime = 0.0f;&
&& isClickTwo& =&
&preTime = 0.0f;
&&& nextTime = 0.0f;
&&& isClickTwo& =
接着就是要在 ccTouchesBegan(CCSet* touches,CCEvent* event) 这个方法中(注意要在began这个方法中进行,而非ended这个方法中)进行单击和双击的判断处理了。代码如下:
void HelloWorld::ccTouchesBegan(CCSet* touches, CCEvent* event)&
&&& isClickTwo =&
&&& nextTime = millisecondNow();&
&&& if ((nextTime - preTime & 300) && (nextTime - preTime & 50)) {&
&&&&&&& CCLog(&double click&);&
&&&&&&& isClickTwo =&
&&& //在回调方法中处理单击事件&&
&&& scheduleOnce(schedule_selector(HelloWorld::ff), 0.25f);&
&&& preTime = millisecondNow();&
void HelloWorld::ff(float tt)&
&&& if (! isClickTwo) {&
&&&&&&& CCLog(&single click&);&
void HelloWorld::ccTouchesBegan(CCSet* touches, CCEvent* event)
&&& isClickTwo =
&&& nextTime = millisecondNow();
&&& if ((nextTime - preTime & 300) && (nextTime - preTime & 50)) {
&&&&&&& CCLog(&double click&);
&&&&&&& isClickTwo =
&&& //在回调方法中处理单击事件
&&& 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。
初始化为:
clicked =&
处理的代码如下:
void& HelloWorld::ccTouchesBegan(CCSet* touches, CCEvent* event)&
&&& if (clicked) {&
&&&&&&& clicked =&
&&&&&&& CCLog(&double click&);&
&&&&&&& //延时0.25s执行(注意在这0.25s的延时过程中clicked已经为true),&&
&&&&&&& //如果在这个过程中再次click,那么就执行上面的双击事件处理了&&
&&&&&&& //否则,那么就执行下面的回调函数了,处理单击事件&&
&&&&&&& scheduleOnce(schedule_selector(HelloWorld::ff), 0.25f);&
&&&&&&& clicked =&
//在回调函数中处理单击事件&&
void HelloWorld::ff(float tt)&
&&& if (clicked) {&
&&&&&&& clicked =&
&&&&&&& CCLog(&single click&);&
void& HelloWorld::ccTouchesBegan(CCSet* touches, CCEvent* event)
&&& if (clicked) {
&&&&&&& clicked =
&&&&&&& CCLog(&double click&);
&&&&&&& //延时0.25s执行(注意在这0.25s的延时过程中clicked已经为true),
&&&&&&& //如果在这个过程中再次click,那么就执行上面的双击事件处理了
&&&&&&& //否则,那么就执行下面的回调函数了,处理单击事件
&&&&&&& scheduleOnce(schedule_selector(HelloWorld::ff), 0.25f);
&&&&&&& clicked =
//在回调函数中处理单击事件
void HelloWorld::ff(float tt)
&&& if (clicked) {
&&&&&&& clicked =
&&&&&&& CCLog(&single click&);
同样还是在终端中输出是单击还是双击的信息。
通过比较二者实现的方法可以看到,其实二者的实现过程还是有点类似的,只不过判断单击,双击的具体实现过程有点差异,在实际使用过程中建议是使用第二种方法,比较简洁。}

我要回帖

更多关于 电信光纤怎么收费 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信