不同控件的点击事件如何处理?

我有一个ui编辑器的页面,上半部分有几个按钮,下半部分是一个可以点击的区域,有个背景。
我把按钮和背景图上都加勾了 “交互” 的选项,然后扔到工程里面load出来,发现上边的按钮点击是可以有点击效果的,但是下发的区域的点击的事件却不知道应该怎么样获取?
我需要明确的知道用户点击了具体的区域的坐标点。

我尝试在代码中增加setTouchEnabled(true);registerWithTouchDispatcher这种增加点击代理的方法后,重写ccTouchEnded等方法还是不能获取下方背景的点击事件,我又尝试将registerWithTouchDispatcher的优先级置为-1后发现下方部分可以获取到点击事件了,但是上半部分的按钮又都没有点击效果了,此时我应该如何处理这个点击事件?

新人,如果有使用错误的地方请帮忙指出,谢谢!

请问你的按钮是否正确设置回调函数呢?

您好 我直接上代码吧

UIButton* button = static_cast<UIButton*>(widget->getChildByName(“Panel_BG”)->getChildByName(“Panel_Option”)->getChildByName(“Button_right”));
button->addTouchEventListener(this, toucheventselector(PlayingLayer::rightButtonTouched));

我如果不添加点击代理(registerWithTouchDispatcher)的话 这个回调是能回调到的 一旦我添加了代理同时设置优先级为-1 这个回调就不会触发了
我总感觉我下方区域的点击处理不应该使用重写ccTouchEnded的方式去做,但是又不知道该如何获取点击事件

你好,你下面既然添加的是widget类型控件就都可以使用addTouchEventListener方法的。

您好 我想确认一下addTouchEventListener这个注册的回调,能够把当前用户点击的具体坐标传回来么?跟ccTouchEnded的CCTouch会带会点击的位置相同。

cocostudio的分发机制是:TouchGroup注册带目标的触摸事件,然后自己负责分发,所以Button不需要自己在调用registerWithTouchDispatcher注册;
另外你说的按钮的回调函数能否像ccTouchEnded的CCTouch那样传回点击位置,触摸事件的位置是和坐标系有关的;
如果我没记错的按钮的回调函数是可以传回点击位置的坐标的,应该是相对于其父节点的位置,参考Widget中的getTouchStartPos(),getTouchMovePos()等方法

所有的坐标信息都包在控件的属性内,可以通过以下方法获取:

const CCPoint& getTouchStartPos();


const CCPoint& getTouchMovePos();


const CCPoint& getTouchEndPos();

感谢回复,正在用sender的getTouchEndPos获取点击坐标,谢谢!

感谢版主回复,确实使用sender带回来的回调控件可以获取上面的点击位置getTouchEndPos获取点击坐标,谢谢!

使用getTouchEndPos()我记得会出现这样的情形,如果你的手指不是在按钮上弹起得话,是触发不了该按钮的releaseEvent()事件的,也就是说不进入你的eventType==TOUCH_EVENT_ENDED分支,这样在做长按按钮时候会出现bug;
如果仅仅只需要按钮点击响应就没关系:14: