cocos2d-x学习日志(6) --触屏事件

转载请标明:转载自【小枫栏目】,博文链接:http://blog.csdn.net/my183100521/article/details/10276991

一、简介

一般在菜单中,不是继承自CCLayer,这时候要检测触屏,就需要两步就可以完成

第一步:setIsTouchEnabled(true);这句话在类初始化的时候加入

第二步:重写相应的函数:

ccTouchesBegan(CCSet *pTouches,CCEvent *pEvent);//触屏开始事件

ccTouchesMoved(CCSet *pTouches,CCEvent *pEvent);//拖动事件

ccTouchesEnded(CCSet *pTouches,CCEvent *pEvent);//触屏结束事件

需要在哪个消息上作处理,就重写哪个函数就可以,具体的重写方法registerWithTouchDispatcher,如

void HelloWorld::registerWithTouchDispatcher(void)
{
    CCDirector* pDirector = CCDirector::sharedDirector();
    pDirector->getTouchDispatcher()->addTargetedDelegate(this, 0,true); //单点触摸
    //pDirector->getTouchDispatcher()->addStandardDelegate(this, 0);//多点触摸
}

二、实例


1.主角随手移动,参考《Cocos2d-x 权威指南》里的例子。

HelloWorldScene.h

//add mumber
    CCSprite* hero;
    float deltax;
    float deltay;
    bool isControl;
    //touch事件
    std::string title();
     void registerWithTouchDispatcher(void);
     bool ccTouchBegan(CCTouch* touch,CCEvent* event);
     void ccTouchMoved(CCTouch* touch,CCEvent* event);
     void ccTouchEnded(CCTouch* touch,CCEvent* event);
     void ccTouchCancelled(CCTouch* touch,CCEvent* event);
HelloWorldScene.cpp

std::string HelloWorld::title()
{
    return "Targeted touches";
}

void HelloWorld::registerWithTouchDispatcher(void)
{
    CCDirector* pDirector = CCDirector::sharedDirector();
    pDirector->getTouchDispatcher()->addTargetedDelegate(this, 0,true); //单点触摸
    //pDirector->getTouchDispatcher()->addStandardDelegate(this, 0);//多点触摸
}

bool HelloWorld::ccTouchBegan(cocos2d::CCTouch *touch, cocos2d::CCEvent *event)
{
    CCLog("ccTouchBegan");
    CCPoint heropos = hero->getPosition();
    CCPoint location = touch->locationInView();
    location = CCDirector::sharedDirector()->convertToGL(location);
    
    if (location.x > heropos.x - 42.5 && location.x < heropos.x +42.5 && location.y > heropos.y - 60.5 && location.y <heropos.y +60.5) {
        isControl = true;
        deltax = location.x - heropos.x;
        deltay = location.y - heropos.y;    
    }
    
    return true;
}

void HelloWorld::ccTouchMoved(cocos2d::CCTouch *touch, cocos2d::CCEvent *event)
{
    CCLog("ccTouchMoved");
    if (isControl) {
        CCPoint location = touch->locationInView();
        location = CCDirector::sharedDirector()->convertToGL(location);
        
        float x = location.x - deltax;
        float y = location.y - deltay;
        
        hero->setPosition(ccp(x,y));
    }
}

void HelloWorld::ccTouchEnded(cocos2d::CCTouch *touch, cocos2d::CCEvent *event)
{
    CCLog("ccTouchEnded");
    isControl = false;
}

void HelloWorld::ccTouchCancelled(cocos2d::CCTouch *touch, cocos2d::CCEvent *event)
{
    CCLog("ccTouchCancelled");
    isControl = false;
}
在init()添加代码:

    hero = CCSprite::create("Role.png");
    this->addChild(hero);
    
    //registerWithTouchDispatcher();
    this->setTouchEnabled(true);

注:若setTouchEnabled(),没调用registerWithTouchDispatcher,直接引用注册函数吧~~


效果图:







今天的博文就写到这里,若有不好之处,望各大网友留言赐教,大家交流下~~


参考博文:http://blog.csdn.net/bill_man/article/details/7214667


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热血枫叶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值