为啥Layer的onTouchBegan/onTouchEnded不被调用?

直接在cpp-empty-test中的代码中加的:
bool onTouchBegan(Touch *touch, Event *unused_event);
void onTouchEnded(Touch *touch, Event *unused_event);

结果发现这2个函数不会被调用,但多点触摸的回调是会被调用的

后来设置了这个也没用
this->setTouchMode(Touch::DispatchMode::ONE_BY_ONE);

为啥?

我也遇到了相同的问题,请问楼主解决了没有?

auto dispatcher = Director::getInstance()->getEventDispatcher();
auto listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = CC_CALLBACK_2(GameLayer::onTouchBegan,this);
listener->onTouchMoved = CC_CALLBACK_2(GameLayer::onTouchMoved,this);
listener->onTouchEnded = CC_CALLBACK_2(GameLayer::onTouchEnded,this);
listener->setSwallowTouches(true);//不向下传递触摸
dispatcher->addEventListenerWithSceneGraphPriority(listener,this);

我也这样写过,是可以的。
但我的疑问是:onTouchesBegan这个只需要重载就可以用了,如下:

virtual void onTouchesBegan (const std::vector< Touch * > &touches, Event *unused_event);

为什么onTouchBegan这样做就不行,一定要写那样一大堆代码。

请指教,谢谢!

因为Layer默认添加复数形式的触摸监听

void onTouchesBegan (…)是复数的
onTouchBegan(…)是单数的

如果再不清楚可以看一下

http://blog.csdn.net/shun_fzll/article/details/24014967

我之前使用cocos2d-iPhone的时候,对继承自CCSprite的对象进行触控操作非常简单,只要实现touchBegan…这些方法就可以了。与C2DX3.1相比,它不用自己写代码判断触点是否点中精灵。

因此产生了一些问题:

  1. C2DX为什么不封装对精灵的触控(比如:是否点中),要开发者自己实现?
  2. 我感觉单点比多点更常用。框架默认添加多点,不添加单点,这是出于什么考虑呢?

以上,继续表示感谢!

这问题跟天时地利人和有关吧,也许王哲大大在撸代码的时候,

突然发现昨天买的六he彩开了,没中,精灵触控不写了!

然后隔天撸代码的时候发现
六he彩买双中了好几W刀,多点触控就是默认了!

=================================================

:877:

好吧我的简单理解:

1.使用触摸机制可以更加灵活的控制,毕竟不是每个节点都需要响应触摸,还有再来就是容易集中管理
2.因为多点满足多个layer基本触摸需求,便于统一管理,单点触摸则使功能划分更清晰吧。

— Begin quote from ____

引用第6楼shun_fzll于2014-06-30 22:55发表的 回 5楼(swordkid) 的帖子 :
这问题跟天时地利人和有关吧,也许王哲大大在撸代码的时候,

突然发现昨天买的六he彩开了,没中,精灵触控不写了!

然后隔天撸代码的时候发现
六he彩买双中了好几W刀,多点触控就是默认了!
http://www.cocoachina.com/bbs/job.php?action=topost&tid=206822&pid=992642

— End quote

可以理解,多谢答疑!