creator怎样屏蔽多点触摸?

在公司项目里发现一个 touch事件的bug ,在instantite 一个prefab的时候, 如果prefab稍微大点,在canvas上注册的touch事件 就会只监听到 touch start ,丢失 touchend 和touchcancel ,希望官方 排查一下

touch 的事件注册的时候,useCapture 设置为true

这个如果我一直按着节点不放,如果有其他的逻辑导致节点destroy或者active为false的话,touchNum就不会再减回去了。我后来做了点修改。希望有所改善。
var onPostActivated = cc.Node.prototype._onPostActivated;
cc.Node.prototype._onPostActivated = function (active) {
if(!active && this._canTouch){
this._canTouch = false;
cc.Node.touchNum–;
}
onPostActivated.call(this,active);
};

var onPreDestroy = cc.Node.prototype._onPreDestroy;
cc.Node.prototype._onPreDestroy = function () {
if(this._canTouch){
this._canTouch = false;
cc.Node.touchNum–;
}

__onPreDestroy__.call(this);

};

引擎应该支持多点开关。我也看到其它引擎也支持多点开关。但我还是想问下为什么需要屏蔽多点触摸?

我也想问,为什么你们要把cocos2dx android 的多点触摸给屏蔽了,ios的又没屏蔽。。。 而且好像支持三个手指了?
我记得以前是支持很多手指的(难道我记错了)。

在电脑上的touchId竟然是undefined。。。

不屏蔽多点,如果在屏幕上好几个手指乱按,有些麻烦~

ios,去xcode改,Android去Android Studio改。你百度一下单点触摸全都是。

一个按钮A 切换到场景A 一个按钮B切换到场景B 我同时按两个按钮 应该跳到哪个场景?

1赞

请问现在1.9.x版本的creator支持全局的关闭多点触摸的开关了吗?

请问什么时候支持这个开关

尽出馊主意

panda, 2.0.1 现在支持 单点 or 多点触控 开关了吗,肛需啊。。。

请求服务器可能会出问题

8102年了,马上都9102年了,所以这个开关还没有吗 @panda @jare

1、引擎初始化,重写Node几个接口
cc.Node.maxTouchNum = 1;
cc.Node.touchNum = 0;
var dispatchEvent = cc.Node.prototype.dispatchEvent;
cc.Node.prototype.dispatchEvent = function (event) {
switch (event.type) {

            case 'touchstart':
                Print(event.type,cc.Node.touchNum,cc.Node.maxTouchNum)
                if (cc.Node.touchNum < cc.Node.maxTouchNum) {
                    cc.Node.touchNum++;
                    cc.Node.touchNum = cc.Node.touchNum > 1 ? 1 : cc.Node.touchNum
                    this._canTouch = true;
                    __dispatchEvent__.call(this, event);
                }
                break;
            case 'touchmove':
                Print(event.type)
                if (!this._canTouch && cc.Node.touchNum < cc.Node.maxTouchNum) {
                    this._canTouch = true;
                    cc.Node.touchNum++;
                    cc.Node.touchNum = cc.Node.touchNum > 1 ? 1 : cc.Node.touchNum
                }

                if (this._canTouch) {
                    __dispatchEvent__.call(this, event);
                }

                break;
            case 'touchend':
                Print(event.type)
                if (this._canTouch) {
                    this._canTouch = false;
                    cc.Node.touchNum--;
                    cc.Node.touchNum = cc.Node.touchNum < 0 ? 0 : cc.Node.touchNum
                    __dispatchEvent__.call(this, event);
                }
                break;
            case 'touchcancel':
                Print(event.type)
                if (this._canTouch) {
                    this._canTouch = true;
                    cc.Node.touchNum--;
                    cc.Node.touchNum = cc.Node.touchNum < 0 ? 0 : cc.Node.touchNum
                    __dispatchEvent__.call(this, event);
                }
                break;
            default:
                __dispatchEvent__.call(this, event);
        }
    };

    var onPostActivated = cc.Node.prototype._onPostActivated;
        cc.Node.prototype._onPostActivated = function (active) {
        if(!active && this._canTouch){
            this._canTouch = false;
            cc.Node.touchNum--;
            cc.Node.touchNum = cc.Node.touchNum < 0 ? 0 : cc.Node.touchNum
        }
        onPostActivated.call(this,active);
    };

    var __onPreDestroy__ = cc.Node.prototype._onPreDestroy;
    cc.Node.prototype._onPreDestroy = function () {
        if(this._canTouch){
            this._canTouch = false;
            cc.Node.touchNum--;
            cc.Node.touchNum = cc.Node.touchNum < 0 ? 0 : cc.Node.touchNum
        }

        __onPreDestroy__.call(this);
    };
4赞

厉害。不过还是希望引擎能给这个开关

叼,楼上的楼上的办法可行

ios 和 安卓屏蔽多点触控都只需要一行代码就能搞定,昨天才试过,可行。构建项目之后,去build\jsb-link\frameworks\runtime-src目录下找到对应平台的工程文件,用对应平台的开发工具打开工程。找到下面链接描述的文件,对应修改即可。真正做到一行代码搞定。我是参考这里做的:cocos 禁止多点触摸

2赞

有些功能需求是只能单点就触发就行了,多点都触发不觉得怪吗?