昨天项目里面碰到了一个问题,spriteA的点击事件穿透了,导致spriteA没响应,而spriteA下面的spriteB响应了,其中spriteA和spriteB的优先级同为0。
我当时就有些奇怪,这是由于两者的ccTouchBegan的返回值为false,所以事件传递下去了。
要想touch事件不往下传递,1、CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true); 2、ccTouchBegan的返回值为true。
这里面还有一个关键点:在同一个layer中是后add的对象先接受touch响应,再根据其设置判断是否往下传递touch响应,而不是根据其depth来按顺序接受touch响应。
同理,在同一个scene中后add的layer先接受touch响应,再根据其设置判断是否往下传递touch响应,而不是根据该scene中各个layer的depth值来按顺序接受touch响应。
这解释可以结合上一篇文章里面的例子一起看,cocos2d-x中继承CCMenu定义自己的MyMenu,这个是解决优先级的问题 .
下面是我在网上看到别人的一些总结,也可以看看: