| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- cc.Class({
- extends: cc.Component,
- properties: {
- },
- onLoad () {
- this.init();
- this.registerEvent();
- },
- init()
- {
- this.firstX = null;
- this.firsty = null;
- this.listenerArr = [];
- this.touchTimes = 0;
- },
- registerEvent() {
- //touchstart 可以换成cc.Node.EventType.TOUCH_START
- this.node.on('touchstart', this.onEventStart, this);
- //touchmove 可以换成cc.Node.EventType.TOUCH_MOVE
- this.node.on('touchmove', this.onEventMove, this);
- //touchcancel 可以换成cc.Node.EventType.TOUCH_CANCEL
- this.node.on('touchcancel', this.onEventCancel, this);
- //touchend 可以换成cc.Node.EventType.TOUCH_END
- this.node.on('touchend', this.onEventEnd, this);
- },
- registerListener(listenerNode)
- {
- // 要判断对象是否已经注册过,如果存在不注册
- if(this.indexOf(this.listenerArr, listenerNode) != -1) return;
- this.listenerArr.push(listenerNode);
- },
- unRegisterListener(listenerNode)
- {
- // 要判断对象是否已经注册过,如果存在才可以删除
- if(this.indexOf(this.listenerArr, listenerNode) != -1)
- {
- this.remove(this.listenerArr, listenerNode);
- }
- },
- dispatchEvent(eventName, data)//把所有的监听事件分发给所有接收到回调的节点
- {
- for (let i = 0; i < this.listenerArr.length; i++) {
- this.listenerArr[i].emit(eventName, data);
- }
- },
- indexOf(arr, item) {//判断元素在数组第几位
- for (let i = 0; i < arr.length; i++) {
- if (arr[i] == item) return i;
- }
- return -1;
- },
- /**
- * 触摸开始
- * @param {*} event
- */
- onEventStart(event) {
- //世界坐标
- let worldPoint = event.getLocation();
- // console.log('start Event \n worldPoint=', worldPoint);
- // console.log('touch start');
- this.firstX = worldPoint.x;
- this.firstY = worldPoint.y;
- this.touchTimes++;
- if(this.touchTimes == 2)
- {
- this.touchTimes = 0;
- this.dispatchEvent('doubletouch', worldPoint);
- }
- else
- {
- this.scheduleOnce(function(){
- this.touchTimes = 0;
- }.bind(this),0.2)
- }
- this.dispatchEvent('touchstart', worldPoint);
- },
- /**
- * 触摸移动
- * @param {*} event
- */
- onEventMove(event) {
- //世界坐标
- let worldPoint = event.getLocation();
- // console.log('move Move \n worldPoint=', worldPoint);
- },
- /**
- * 触摸
- * 当手指在目标节点区域外离开屏幕时
- * 比如说,触摸node的size是200x200。
- * 当超过这个区域时,就是触发这个事件
- * @param {*} event
- */
- onEventCancel(event) {
- //世界坐标
- let worldPoint = event.getLocation();
- // console.log('cancel Event \n worldPoint=', worldPoint);
- },
- /**
- * 当手指在目标节点区域内离开屏幕时
- * @param {*} event
- */
- onEventEnd(event) {
- //世界坐标
- let worldPoint = event.getLocation();
- // console.log('end Event \n worldPoint=', worldPoint);
- let endX = this.firstX - worldPoint.x;
- let endY = this.firstY - worldPoint.y;
- // var tempPlayer = node.parent.convertToNodeSpaceAR(touchPoint);
- // node.setPosition(tempPlayer);
- if (Math.abs(endX) > Math.abs(endY)){
- //手势向左右
- //判断向左还是向右
- if (endX > 0){
- //向左函数
- // console.log('left');
- this.dispatchEvent('swipe', 'left');
- } else {
- //向右函数
- // console.log('right');
- this.dispatchEvent('swipe', 'right');
- }
- } else {
- //手势向上下
- //判断手势向上还是向下
- if (endY > 0){
- //向下函数
- // console.log('down');
- this.dispatchEvent('swipe', 'down');
- } else {
- //向上函数
- // console.log('up');
- this.dispatchEvent('swipe', 'up');
- }
- }
- },
- });
|