CCTouch触摸事件

来源:互联网 发布:声优赚钱软件 编辑:程序博客网 时间:2024/05/14 07:20
一、CCTouch触摸事件

cocos2d-x触摸事件分为两种,单点触摸和多点触摸,单点触摸是我们最常用的触摸方式。要使用单点触摸必须要实现一下几个函数

virtual void registerWithTouchDispatcher(void);
    virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);//必须实现
    virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);
    virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);
virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);

不用必须实现CCLayer的onEnter()和onExit()方法,在registerWithTouchDispatcher中会自动完成触摸事件的注册和移除,要开启触摸事件,在初始化时必须设置setTouchEnabled(true),默认开启的是多点触摸,在registerWithTouchDispatcher方法中需要我们添加单点触摸。例子中在testLayer中添加了一个按钮和一个标签,当点击按钮的时候会弹出一个半透明的viewLayer遮盖在testLayer上面,viewLayer上面添加有一个标签。我们可以通过改变按钮和各层的优先级来看见不同的显示效果,详细运行效果可见工程源码。

代码如下:
  1. bool TouchTest::init()
  2. {
  3.     if(!CCLayer::init())
  4.     {
  5.         return false;
  6.     }
  7.     setTouchEnabled(true);
  8.     size=CCDirector::sharedDirector()->getWinSize();
  9.     CCSprite* background=CCSprite::create("background.jpg");
  10.     background->setPosition(ccp(size.width/2, size.height/2));
  11.     this->addChild(background);
  12.     
  13.     CCLabelTTF* pLabel=CCLabelTTF::create("This is testLayer", "", 35);
  14.     pLabel->setAnchorPoint(ccp(0.5,0.5));
  15.     pLabel->setColor(ccc3(30, 40, 50));
  16.     pLabel->setPosition(ccp(size.width/2,size.height/2-100));
  17.     this->addChild(pLabel);
  18.     
  19.     CCMenuItemImage* item=CCMenuItemImage::create("confirmA.png", "confirmB.png", this, menu_selector(TouchTest::openLayer));
  20.     item->setPosition(ccp(size.width/2,size.height/2));
  21.     CCMenu* menu=CCMenu::create(item,NULL);
  22.     menu->setPosition(CCPointZero);
  23.     menu->setTouchPriority(-1);//CCmenu默认的优先级是-128
  24.     this->addChild(menu);
  25.     
  26.     return true;
  27. }

  28. void TouchTest::openLayer()
  29. {
  30.     ViewLayer* layer=ViewLayer::create();
  31.     this->addChild(layer);
  32. }

  33. void TouchTest::registerWithTouchDispatcher(void)
  34. {/*注册单点触摸事件,可以改变第二参数的数值和CCMenu对比,第三个参数的意思是是否吞掉后续触摸事件,当设置为true时,当该CCTouchDelegate所在层的ccTouchBegan返回为true时,触摸消息响应之后就会被吞掉,反之则能继续传递下去,通常都设置为true*/
  35.     CCLayer::registerWithTouchDispatcher();
  36.     CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
  37. }

  38. bool TouchTest::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
  39. {
  40.     CCLog("Touch testlayer");
  41.     return true;//此处必须返回true,否者不会响应后面的事件。
  42. }

  43. void TouchTest::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent)
  44. {
  45.     
  46. }

  47. void TouchTest::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)
  48. {
  49.     
  50. }

  51. void TouchTest::ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent)
  52. {
  53.     
  54. }
复制代码
0 0
原创粉丝点击