首页 > 代码库 > cocos2dx-3.2 笔记 - 点击事件

cocos2dx-3.2 笔记 - 点击事件

点击事件检测

直接上代码

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);}