我的CocosCreator 版本是1.9.3的,然后这个问题我在网上百度了,官方给出了node的一个 方案:
这个截图来自 http://forum.cocos.com/t/creator/45139这里
这个 方法我没有试,因为我这里主要是button的同时多点的问题,小则造成打开了两个窗口,大则造成界面显示错误、报错。
我看了button的源码,里面一共监听了相关的事件有四个:_onTouchBegan、_onTouchMove、_onTouchEnded、_onTouchCancel,然后我将多点会触发的顺序列了下来:
操作 | 可能情况 |
---|---|
1.两个按钮同时点击同时放开 | began1->began2->touchend1->touchend2 |
2.两个按钮依次点下,同时放开 | (1).began1->began2->touchend1->touchend2 (2).began1->began2->move1->cancel1 |
3.两个按钮同时点击,依次放开(21) | (1).began1->began2->touchend2->(0.5s后)->touchend1 (2).began1->move1->cancel1->began2 |
4.两个按钮同时点击,2滑动后同时放开 | began2->began1->cancel2->move2->move1 |
5.两个按钮依次点下(12),2滑动后同时放开 | (1) began1->began2->cancel1->move1->move2->move1~一直轮替 (2) began1->move1->cancel1->began2->move2->move1~一直轮替 |
开始想的办法是:写一个新的继承cc.Button的类NewButton,然后在类中重写touchend方法:
_onTouchEnded(event){
if(!data.btnClicked){ //按钮做0.1s间隔响应
super._onTouchEnded(event);
this.scheduleOnce(()=>{
data.btnClicked = false;
},0.1);
}else{
super._onTouchCancel();
}
}
以上方法发现,只要按钮事件触发了move,就不会再出发touchend了,所以会出现几个问题:
第四、第五点和第三点的第二小点,第二的第二小点,有一个按钮会一直是灰色不会变回明亮;
然后第三的第一小点,在0.1s后再松开按钮也会造成两个按钮的事件都同时响应了。
开始我是想在_onTouchMove中调用_onTouchCancel,这样颜色就会恢复,但是第三点的两个问题还是没能解决,第二的第二小点的问题依旧没能解决 。
后来我打算在_onTouchBegan方法中就开始响应事件,开始我以为这个这样会导致按钮颜色不变化的问题,但是发现这个办法其实已经比较好了,不用改来改去。
_onTouchBegan(event){
if(!data.btnClicked){ //按钮做0.1s间隔响应
data.btnClicked = true;
super._onTouchBegan(event);
this.scheduleOnce(()=>{ //间隔一秒响应,会有颜色变化
super._onTouchEnded(event);
data.btnClicked = false; //这是一个全局变量
},0.1)
}
}
这样写完后我试了下暂时没有什么问题,有问题我再回来改,现在暂时就这样写了 ,对了监听下按钮销毁的方法data.btnClicked = false; 把全局变量设为初值。避免销毁的时候没有执行定时器。