egret的timer使用总结
来源:互联网 发布:ext grid 选中的数据 编辑:程序博客网 时间:2024/05/16 16:15
相信大家都知道,egret是一款H5游戏引擎,而且,随着手机性能的提高,H5游戏也逐渐多了起来,好多人在用这款引擎进行H5游戏开发,博主也尝试了一下,但是,在使用过程中,还是发现了有不如意的地方,其中之一,就是该引擎的一个总要部分——计时器,这部分一定要给后来者说明一下,最大的坑,就是这个Timer停不下来,相信好多小伙伴们已经发现了这个问题.
博主在自己的demo中想实现一个按钮的长按事件,当按下一个按钮的时候,就每隔0.3秒调用一个已经写好的方法,当手指从按钮上移除的时候,就取消长按事件,不再调用这个方法,在初始化方法中,创建计时器:
this.timer = new egret.Timer(300, 0); this.timer.addEventListener(egret.TimerEvent.TIMER, this.timerCallFunc, this);
这里创建一个Timer,并设置了调用间隔事件为300毫秒,后面的0表示一直调用timer的回调方法,然后,是给timer添加事件,回调方法名叫做timerCallFunc.这里的设计思路是在按钮开始点击的事件TOUCH_BEGIN中,启动timer,然后,在TOUCH_END中,停止计时器,因此,添加事件监听方法:
this.button.addEventListener(egret.TouchEvent.TOUCH_BEGIN, this.begin, this); this.button.addEventListener(egret.TouchEvent.TOUCH_END, this.end, this);
在begin方法中,调用this.timer.start();在end方法中调用this.timer.stop();于是乎,问题来了,当我TOUCH_END的时候,确实调用了end方法,这里是没问题的,也执行了timer的stop()方法,但是还是会每隔300毫秒执行一次timerCallFunc方法,这问题就严重了,要是我要实现一个功能,在游戏的商城中,设置一个按钮的长按事件,玩家长按按钮,就消耗金币,多次购买药水,然后,手指从按钮上移开之后,就不再购买,那如果出现上面的问题,当手指从按钮上面移开之后,玩家打开了其他的页面,结果后台一直在运行这个timer,那玩家的金币岂不是全都用没了,这就太坑人了.为了避免这个问题,一个简单的方法就是设置一个变量,用来标记是否调用回调函数.我们定义一个变量:
private flag:number = 0;
表示是否长按了这个按钮,0表示没有长按,1表示长按了,当我们点击按钮时,首先调用的是TOUCH_BEGIN的事件监听方法begin(),我们在begin中设置flag = 1;然后在TOUCH_END中设置flag = 0;同时,在timerCallFunc中判断flag的值,如果是1,才执行购买的操作,否则,直接return;这样就不会出现这样的问题了,由于timer的回调间隔是0.3秒,所以,当手指或者鼠标开始点击按钮的时候,过了0.3秒才会执行timerCallFunc,因此,不必担心是否进行的操作到底是不是长按.这里还有一个问题要指出,就是timer的初始化的方法一定不要写在按钮的TOUCH_BEGIN中,这样会出大问题:因为无法停掉timer,所以,每次点击一次开始按钮,都会重新创建一个timer,这样,点了多次之后,就要创建好多好多个timer,timerCallFunc就会多次被调用,就算我们设置了flag值,也是有问题的,当有多个timer同时调用一个方法的时候,只要长按按钮不松手,那么,flag == 1就成立,那么,这么多的timer都按照0.3秒的间隔调用这个回调方法,就会产生多次调用,而且,时间间隔会小于0.3秒,而且是多次调用,完全超出了我们的控制范围,因此这部分需要多加注意.
0 0
- egret的timer使用总结
- Egret引擎的使用
- Egret的eui的使用
- 【egret】 输入文本的使用
- 【Egret】在WebStorm里使用Egret Engine 的注意点
- 总结的timer定时器的使用
- Egret的帧动画的使用
- [Egret学习笔记 二]MovieClip的使用
- [Egret学习笔记 四]声音的使用
- egret的eui以及exml使用
- Egret引擎的EUI基础使用教程
- Egret的滚动list列表如何使用
- egret 使用的一些小技巧
- .net中三种Timer使用总结
- Egret基本知识点总结
- Egret 性能优化总结
- boost库中计时器的使用总结(timer)
- Timer,Timertask的使用
- sqlite3数据库详细使用方法
- hash实现
- 循环神经网络教程 第四部分 用Python 和 Theano实现GRU/LSTM RNN
- 彻底解密C++宽字符
- 关于Android中activity的问题
- egret的timer使用总结
- 彻底解密C++宽字符
- Latex中用bib文件添加参考文献
- Arm-linux-gcc-4.3.2安装步骤
- 浅谈Unity与VR产业,用Unity开发第一款VR应用
- android 学习笔记4-ListView使用
- tensorflow GTX1070 安装
- Android 的这种浮动的框框式怎么实现的,并没有在java代码里看到这样的activty啊
- Volley StringRequest和JSONObjectRequest的使用