部分程序代码:
auto listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = CC_CALLBACK_2(CurveLayer::touchBegan, this);
listener->onTouchMoved = CC_CALLBACK_2(CurveLayer::touchMoved, this);
listener->onTouchEnded = CC_CALLBACK_2(CurveLayer::touchEnded, this);
listener->onTouchCancelled = CC_CALLBACK_2(CurveLayer::touchCancelled,this);
//两种都可以
// _eventDispatcher->addEventListenerWithSceneGraphPriority(listener,this);
Director::getInstance()->getEventDispatcher()->
addEventListenerWithSceneGraphPriority(listener,this);
回掉函数:
bool CurveLayer::touchBegan(cocos2d::Touch *touch, cocos2d::Event *event)
{
Vec2 pos=touch->getLocation();
log("touchBegan x:%f,y:%f",pos.x,pos.y);
return true;//返回false时,触摸移动、触摸结束不会触发
}
void CurveLayer::touchMoved(Touch*touch, Event*event){
Vec2 pos=touch->getLocation();
log("touchMoved x:%f,y:%f",pos.x,pos.y);
}
}
void CurveLayer::touchEnded(Touch*touch, Event*event){
Vec2 pos=touch->getLocation();
log("touchEnded x:%f,y:%f",pos.x,pos.y);
}
void CurveLayer::touchCancelled(cocos2d::Touch*touch, cocos2d::Event*event)
{
Vec2 pos=touch->getLocation();
log("touchCancelled x:%f,y:%f",pos.x,pos.y);
}
CurveLayer是自己定义的层。
addEventListenerWithSceneGraphPriority该单点触摸时间优先级与所在的节点优先级相同。
相应的还有设置固定优先级等函数详情见:
http://api.cocos.com/d2/d1b/classcocos2d_1_1_event_dispatcher.html#a9137cbc969607bc1c0f539155af16f15
设置允许向下传递 listener->setSwallowTouches(false)