【cocos2d-js】监听双击

【cocos2d-js】1.自定义鼠标监听类,添加双击效果

第一次发文,而且我自学cocos2d-js才一个月多,写的不好请见谅。

因为最近无聊,想写个扫雷的小游戏,但是扫雷需要监听单击、双击、右键,显然cocos2d-js是没有的,所以这里我自定义了一个类,给大家分享下。

var LieListener = cc.Class.extend({
    listener : null,
    /**
     * 左键单击
     * @param event {cc.EventMouse}
     * @returns {Boolean}
     */
    onLeftButton : function(event) {
        cc.log("left button");
        return true;
    },
    /**
     * 双击
     * @param event {cc.EventMouse}
     * @returns {Boolean}
     */
    onDoubleClick : function(event) {
        cc.log("double click");
        return true;
    },
    /**
     * 右键
     * @param event {cc.EventMouse}
     * @returns {Boolean}
     */
    onRightButton : function(event) {
        cc.log("right button");
        return true;
    },
    updateLeft : function() {
        this.isLeft = false;  // 该this实际为event.getCurrentTarget()对象,而不是该类
    },
    ctor : function() {
        var self = this;
        // listener只重写onMouseDown方法,可根据自己需要添加其它方法,但该方法最好不要改
        this.listener = cc.EventListener.create({
            event : cc.EventListener.MOUSE,
            onMouseDown : function(event) {
                var target = event.getCurrentTarget();
                // cc.EventMouse.BUTTON_LEFT代替0也可以
                if(event.getButton() == 0){
                    if(target.isLeft==undefined || target.isLeft==false){
                        target.isLeft = true;
                        // 双击最长时间延迟,可修改延迟,太长的延迟会出现调用多次scheduleOnce,故自己需加布尔值判断:若更新中则不允许再次调用scheduleOnce,该布尔值最好放到target内,因为updateLeft实际上内部对象this是它,而不是LieListener 。
                        target.scheduleOnce(self.updateLeft, 0.25);
                        return self.onLeftButton(event);
                    }else{
                        target.isLeft = false;
                        return self.onDoubleClick(event);
                    }
                }
                // cc.EventMouse.BUTTON_RIGHT值为2,跟电脑测过右键值为1,不知官方修复了没
                else if(event.getButton() == 1){
                    target.isLeft = false;// 双击的上一次单击必为左键
                    return self.onRightButton(event);
                }
                return false;
            }
        });
    }
})
/**
 * 方便创建重写监听方法的对象
 */
LieListener.create = function(object) {
    // 校检参数类型是否为函数
    var isFun = function(func) {
        if(typeof(func) == "function")
            return true;
        return false;
    }
    var lis = new LieListener();
    if(isFun(object.onLeftButton))
        lis.onLeftButton = object.onLeftButton;
    if(isFun(object.onDoubleClick))
        lis.onDoubleClick = object.onDoubleClick;
    if(isFun(object.onRightButton))
        lis.onRightButton = object.onRightButton;
    return lis;     // 若直接返回lis.listener也是可以的
}

双击监听的大概的思路就是:如果是单击了左键,则给target添加个一次性的计划,在这个时间内又单击了左键,才是双击效果;若单击左键,下一次不为左键则取消双击状态。

调用例子:

        var size = cc.winSize;
        var sprite = new cc.Sprite(res.CloseNormal_png);
        sprite.setPosition(size.width/2, size.height/2);
        this.addChild(sprite);
        cc.eventManager.addListener(LieListener.create({
            // 自己重写
            onLeftButton : function(event) {
                cc.log(event.getLocation().x);
                return true;
            },
            onDoubleClick : function(event) {
                cc.log(event.getLocation().x);
                return true;
            }
        }).listener, sprite);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值