1.遮挡住触摸
void CommonTools::zheDang(Node* node)
{
auto listener = EventListenerTouchOneByOne::create();
listener->setSwallowTouches(true);
listener->onTouchBegan = [](Touch* touch, Event* event)
{
return CommonTools::testRect(touch, event->getCurrentTarget() );
};
listener->onTouchMoved = [](Touch* touch, Event* event){};
listener->onTouchEnded = [](Touch* touch, Event* event){};
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener , node);
}
2.tableview 滚动取消触摸
void CommonTools::onClickTableCell(Node* rectNode, Node* scaleNode, std::function<void()> fun, bool tun, float scaleNum)
{
Director::getInstance()->getEventDispatcher()->removeEventListenersForTarget(scaleNode);
//fangzhi callback twice ..
auto listener = EventListenerTouchOneByOne::create();
listener->setSwallowTouches(tun);
listener->onTouchBegan = [=]( Touch* touch , Event* event )
{
if ( CommonTools::testRect(touch, rectNode) )
{
scaleNode->stopAllActions();
auto scaleTo = ScaleTo::create(0.05f, scaleNum);
scaleNode->runAction(scaleTo);
bool *isMove = new bool(false);
scaleNode->setUserData(isMove);
log("aaaaaaaaccc %d %d", isMove , scaleNode );
return true;
}
return false;
};
listener->onTouchMoved = [=](Touch* touch, Event* event)
{
bool *isMove = (bool*)scaleNode->getUserData();
if (*isMove == false)
{
if (touch->getLocation().getDistance(touch->getStartLocation()) > 15)
{
scaleNode->setScale(1.0f);
*isMove = true;
}
}
};
listener->onTouchEnded = [=](Touch* touch, Event* event)
{
scaleNode->stopAllActions();
scaleNode->setScale(1.0f);
bool *isMove = (bool*)scaleNode->getUserData();
log("aaaaaaaabbb %d %d", isMove , scaleNode );
if (*isMove == true)
{
delete isMove;
return;
}
delete isMove;
if ( CommonTools::testRect(touch, rectNode) )
{
fun();
}
};
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, rectNode);
}
3.普通触摸放大
void CommonTools::onClick2(Node* rectNode, Node* scaleNode, std::function<void()> fun, bool tun , float scaleNum )
{
auto listener = EventListenerTouchOneByOne::create();
listener->setSwallowTouches(tun);
listener->onTouchBegan = [=](Touch* touch, Event* event)
{
bool isClick = CommonTools::testRect(touch, rectNode);
if (isClick)
{
scaleNode->stopAllActions();
auto scaleTo = ScaleTo::create(0.05f, scaleNum);
scaleNode->runAction(scaleTo);
}
return isClick;
};
listener->onTouchMoved = [](Touch* touch, Event* event){};
listener->onTouchEnded = [=](Touch* touch, Event* event)
{
scaleNode->stopAllActions();
auto scaleTo = ScaleTo::create(0.05f, 1.0f);
scaleNode->runAction(scaleTo);
if (CommonTools::testRect(touch, rectNode))
{
fun();
}
};
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, rectNode);
}
4.触摸检测 居家旅行必备
bool CommonTools::testRect( Touch* touch , Node* node )
{
auto po = node->convertTouchToNodeSpace(touch);
Size size = node->getContentSize();
Rect rect(0,0,size.width,size.height);
return rect.containsPoint(po);
}