Cocos2d-x 开发 点击交互的四种处理

1、函数回调

  1. void menuCloseCallback(Object* pSender);  
  2.   
  3. auto closeItem = MenuItemImage::create("CloseNormal.png","CloseSelected.png",  
  4.                         CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));  
  5.   
  6. void HelloWorld::menuCloseCallback(Object* pSender)  
  7. {  
  8.     Director::getInstance()->end();  
  9.   
  10. #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)  
  11.     exit(0);  
  12. #endif  
  13. }  

   2、Layer的touch消息响应

  1. //单点响应  
  2. virtual bool onTouchBegan(Touch* touch, Event  *event) override;  
  3. virtual void onTouchMoved(Touch* touch, Event  *event) override;  
  4. virtual void onTouchEnded(Touch* touch, Event  *event) override;  
  5. virtual void onTouchCancelled(Touch *touch, Event *event) override;  
  6. //多点响应  
  7. virtual bool onTouchesBegan(Touch* touch, Event  *event) override;  
  8. virtual void onTouchesMoved(Touch* touch, Event  *event) override;  
  9. virtual void onTouchesEnded(Touch* touch, Event  *event) override;  
  10. virtual void onTouchesCancelled(Touch *touch, Event *event) override;  

    重写这些函数来对layer的点击做处理。当然,我们需要:

  1. setTouchEnabled(true)。  

 

   此外有个小改动。对于单点触控响应,可以调用:

  

  1. //设置为单点响应  
  2. setTouchMode(Touch::DispatchMode::ONE_BY_ONE);  
  3. //设置为多点响应(默认)  
  4. setTouchMode(Touch::DispatchMode::ALL_AT_ONCE);  
  5.  3、TouchEvent响应
    这是新加入的响应方式。它主要是使用在UIWidget上的。可以将其看做是函数回调的一个扩展,为更多的响应处理提供可能。使用方法大致是:

  1. //声明  
  2. void touchButton(Object* object,TouchEventType type);  
  3.   
  4. //挂接到控件上  
  5. uiButton->addTouchEventListener(this,toucheventselector(HelloWorld::touchButton));  
  6.   
  7. //实现  
  8. void HelloWorld::touchButton(Object* object,TouchEventType type)  
  9. {  
  10.     LabelTTF* label;  
  11.     switch (type)  
  12.     {  
  13.     case TouchEventType::TOUCH_EVENT_BEGAN:  
  14.         label = static_cast<LabelTTF*>(getChildByTag(11));  
  15.         label->setString("按下按钮");  
  16.         break;  
  17.     case TouchEventType::TOUCH_EVENT_MOVED:  
  18.         label = static_cast<LabelTTF*>(getChildByTag(11));  
  19.         label->setString("按下按钮移动");  
  20.         break;  
  21.     case TouchEventType::TOUCH_EVENT_ENDED:  
  22.         label = static_cast<LabelTTF*>(getChildByTag(11));  
  23.         label->setString("放开按钮");  
  24.         break;  
  25.     case TouchEventType::TOUCH_EVENT_CANCELED:  
  26.         label = static_cast<LabelTTF*>(getChildByTag(11));  
  27.         label->setString("取消点击");  
  28.         break;  
  29.     default:  
  30.         break;  
  31.     }  
  32. }  

4、Listener消息响应方式

  1. auto dispatcher = EventDispatcher::getInstance();  
  2.     auto myListener = EventListenerTouch::create(Touch::DispatchMode::ONE_BY_ONE);  
  3.       
  4. //如果不加入此句消息依旧会向下传递  
  5. myListener->setSwallowTouches(true);  
  6.   
  7. myListener->onTouchBegan = [=](Touch* touch,Event* event)  
  8. {  
  9. <span style="white-space:pre">  </span>//some check  
  10.       <span style="white-space:pre">    </span> if (pass)  
  11.        <span style="white-space:pre">   </span>{  
  12.             return true;  
  13.         }  
  14.         return false;  
  15. };  
  16.   
  17. myListener->onTouchMoved = [=](Touch* touch,Event* event)  
  18. {  
  19.     //do something  
  20. };  
  21.   
  22. myListener->onTouchEnded = [=](Touch* touch,Event* event)  
  23. {  
  24.     //do something  
  25. };  
  26.   
  27. dispatcher->addEventListenerWithSceneGraphPriority(myListener,mySprite1);  
  28. dispatcher->addEventListenerWithSceneGraphPriority(myListener,mySprite2);  

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值