点击事件检测
直接上代码
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);dispatcher->addEventListenerWithSceneGraphPriority(listener, this);bool GameLayer::onTouchBegan(Touch* touch, Event *event){ return true;}void GameLayer::onTouchMoved(Touch* touch, Event *event){}void GameLayer::onTouchEnded(Touch*touch, Event *event){}
检测点击了Sprite
bool GameLayer::CheckTouchAli(Touch *touch){ //将点击点转换成自己坐标系中的坐标,即相对于aliSprite(一个Sprite)的原点 Vec2 pt = aliSprite->convertTouchToNodeSpace(touch); int nw = aliSprite->GetRect().size.width; int nh = aliSprite->GetRect().size.height; Rect rc(0,0, nw, nh); return rc.containsPoint(pt);}
Sprite跟随拖动
void GameLayer::SetAliPosToTouchPos(Touch* touch){ Vec2 pt = aliSprite->convertTouchToNodeSpace(touch); int nw = aliSprite->GetRect().size.width; int nh = aliSprite->GetRect().size.height; Vec2 touchPos = Vec2(aliSprite->getPositionX()-nw*0.5+pt.x ,aliSprite->getPositionY()-nh*0.5+pt.y); aliSprite->setPosition(touchPos);}