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

}

 

posted on 2014-08-22 10:45  Kee_Chen  阅读(431)  评论(0编辑  收藏  举报