经常会遇到这样的情况:
(1)layout1想要接受触摸事件
(2)layout1的子视图layout2不接受触摸事件,但layout2里的button接受触摸事件。
解决办法:
让layout->setEnabled(true);
layout->addTouchEventListener(CC_CALLBACK_2(ChapterLayer::touchEvent, this));
给layout加个触摸事件,让它去吞噬layout的低优先级事件。
layout里有2个方法是和触摸相关的
(1)setTouchEnabled,默认_touchEnabled(false),
/**
* Sets whether the widget is touch enabled
*
* The default value is false, a widget is default to touch disabled
*
* @param visible true if the widget is touch enabled, false if the widget is touch disabled.
*/
virtual void setTouchEnabled(bool enabled);
(2)setEnebled, 默认_enabled ( true ),/**
* Sets whether the widget is enabled
*
* true if the widget is enabled, widget may be touched , false if the widget is disabled, widget cannot be touched.
*
* The default value is true, a widget is default to enabled
*
* @param enabled
*/
virtual void setEnabled(bool enabled);
我个人感觉这两个方法在功能上重叠了同样都是控制能否接受到触摸事件,但后者对EventListener进行了封装,所以诞生了setEnebled