cocos-js,Widget的addTouchEventListener改善

cocos-js,Widget的addTouchEventListener改善,第1张

概述一、基本使用 addTouchEventListener是属于Widget下的触摸事件相关的 *** 作,基本使用规则如下: var button = new ccui.Button()button.addTouchEventListener(this.touchEvent, this)touchEvent: function (sender, type) { switch (type) { 一、基本使用

addtouchEventListener是属于Widget下的触摸事件相关的 *** 作,基本使用规则如下:

var button = new ccui.button()button.addtouchEventListener(this.touchEvent,this)touchEvent: function (sender,type) {    switch (type) {        case ccui.Widget.touch_BEGAN:            this._topdisplayLabel.setString("touch Down");            break;        case ccui.Widget.touch_MOVED:            this._topdisplayLabel.setString("touch Move");            break;        case ccui.Widget.touch_ENDED:            this._topdisplayLabel.setString("touch Up");            break;        case ccui.Widget.touch_CANCELED:            this._topdisplayLabel.setString("touch Cancelled");            break;        default:            break;    }}
二、为何改善
现在的触摸事件只做监听,并没有相关逻辑上的判断,我们游戏在开发的过程中遇到一些不正常点击而导致的问题。例如:在场景跳转的时候,连续点击两次后,会push两场同样的场景,正常逻辑应该是只push一次。

三、如何改善
先看我在基于原事件基础上添加的一些类型:

ccui.Widget.touch_TYPE_TIMELY                    = 1  //及时:随时点击,随时响应ccui.Widget.touch_TYPE_DELAY_AFTER               = 2  //延时:随时点击,点击后马上响应,延时一段时间后,响应下次点击ccui.Widget.touch_TYPE_DELAY_FRONT               = 3  //延时:每次onEnter时,延时一段时间后,才能响应点击ccui.Widget.touch_TYPE_ONCE                      = 4  //一次:只有一次点击机会,点击后对象触摸禁止,当onExit后恢复ccui.Widget.touch_TYPE_ALL_BAN                   = 5  //所有:只有一次点击机会,点击后全屏触摸禁止,当onExit后恢复ccui.Widget.touch_TYPE_DELAY_FRONT_AND_ALL_BAN   = 11 //兼具:DELAY_FRONT和ALL_BAN

代码如下:

ccui.Widget.prototype.addtouch = function(_func,_type,_time){    var __type = _type || ccui.Widget.touch_TYPE_TIMELY    var __time = _time || 1    switch (__type){        case ccui.Widget.touch_TYPE_TIMELY:            this.addtouchEventListener(_func)            break        case ccui.Widget.touch_TYPE_DELAY_AFTER:            //当触发点击事件时,将按钮的可触性设置为false,用delayTime延迟1秒后再设置为true            var that = this            var __func = function(_sender,_type){                switch(_type){                    case ccui.Widget.touch_ENDED:                        that.settouchEnabled(false)                        _func(_sender,_type)                        that.runAction(cc.sequence(cc.delayTime(__time),cc.callFunc(function(){                            that.settouchEnabled(true)                        }.bind(that))))                        break                }            }            this.addtouchEventListener(__func)            break        case ccui.Widget.touch_TYPE_DELAY_FRONT:            //在onEnter事件中,将按钮的可触性设置为false,然后delayTime延迟1秒后再设置为true            this.setonEnterCallback(function(){                this.settouchEnabled(false)                this.runAction(cc.sequence(cc.delayTime(__time),cc.callFunc(function(){                    this.settouchEnabled(true)                }.bind(this))))            }.bind(this))            if (_func == null){                return            }            var __func = function(_sender,_type){                switch(_type){                    case ccui.Widget.touch_ENDED:                        _func(_sender,_type)                        break                }            }            this.addtouchEventListener(__func)            break        case ccui.Widget.touch_TYPE_ONCE:            //当触发点击事件时,将按钮的可触性设置为false,在onExit事件中设置为true            var that = this            var __func = function(_sender,_type)                        that.setonExitCallback(function(){                            that.settouchEnabled(true)                        }.bind(that))                        break                }            }            this.addtouchEventListener(__func)            break        case ccui.Widget.touch_TYPE_ALL_BAN:            //当触发点击事件时,在最上层添加一层遮罩,吞噬掉所有触摸,在onExit事件中移除遮罩            var that = this            var __func = function(_sender,_type){                switch(_type){                    case ccui.Widget.touch_ENDED:                        gAddMask()                        _func(_sender,_type)                        that.setonExitCallback(function(){                            gRemoveMask()                        }.bind(that))                        break                }            }            this.addtouchEventListener(__func)            break        case ccui.Widget.touch_TYPE_ALL_BAN_AND_DELAY_FRONT:            //组合,DELAY_FRONT和ALL_BAN            this.setonEnterCallback(function(){                this.settouchEnabled(false)                this.runAction(cc.sequence(cc.delayTime(__time),cc.callFunc(function(){                    this.settouchEnabled(true)                }.bind(this))))            }.bind(this))            var that = this            var __func = function(_sender,_type)                        that.setonExitCallback(function(){                            gRemoveMask()                        }.bind(that))                        break                }            }            this.addtouchEventListener(__func)            break        default:            this.addtouchEventListener(_func)            break    }}

遮罩层的实现:

function gAddMask(){    var __scene = cc.director.getRunningScene()    var __mask_layer = __scene.getChildByname("MaskLayer")    if(!__mask_layer){        __mask_layer = new MaskLayer()        __scene.addChild(__mask_layer,99999)        __mask_layer.setname("MaskLayer")    }else{        __mask_layer.setSwallowtouches(true)    }}function gRemoveMask(){    var __scene = cc.director.getRunningScene()    var __mask_layer = __scene.getChildByname("MaskLayer")    if(__mask_layer){        __mask_layer.setSwallowtouches(false)    }}var MaskLayer = cc.Layer.extend({    ctor:function(){        this._super()        cc.log("wade MaskLayer ctor")        this.Listener = cc.EventListener.create({            event: cc.EventListener.touch_ONE_BY_ONE,swallowtouches: true,ontouchBegan: function (touch,event) {                cc.log("wade MaskLayer ontouchBegan")                return true            },ontouchmoved:function (touch,event){                cc.log("wade MaskLayer ontouchmoved")            },ontouchended:function (touch,event){                cc.log("wade MaskLayer ontouchended")            },})        cc.eventManager.addListener(this.Listener,this);    },setSwallowtouches:function(_bool){        this.Listener.setSwallowtouches(_bool)    }})
总结

以上是内存溢出为你收集整理的cocos-js,Widget的addTouchEventListener改善全部内容,希望文章能够帮你解决cocos-js,Widget的addTouchEventListener改善所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1084628.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存