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

来源:互联网 发布:电影票房数据分析 编辑:程序博客网 时间:2024/05/16 10:30

转载请标明:转载自【小枫栏目】,博文链接: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


原创粉丝点击