cocos2d-x3.x 事件监听笔记

前端之家收集整理的这篇文章主要介绍了cocos2d-x3.x 事件监听笔记前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

cocos版本:3.2

VS版本:VS2013


一、 添加事件监听一般步骤为:创建时间监听器-->增事件监听器-->用导演获取时间派发器将事件监听器添加进去。

二、需要注意的地方有两点:

1.多点触摸中的onTouchesBegan方法没有返回值。如果带返回值,不会报错,但是会报链接错误

2.多点触摸中的传入参数和单点触摸的传入参数不同。

具体看以下代码

1.单点触摸监听器的处理触摸方法

  1. std::function<bool(Touch*,Event*)> onTouchBegan;
  2. std::function<void(Touch*,Event*)> onTouchMoved;
  3. std::function<void(Touch*,Event*)> onTouchEnded;
  4. std::function<void(Touch*,Event*)> onTouchCancelled;

2.多点触摸监听器的处理方法
  1. std::function<void(const std::vector<Touch*>&,Event*)> onTouchesBegan;
  2. std::function<void(const std::vector<Touch*>&,Event*)> onTouchesMoved;
  3. std::function<void(const std::vector<Touch*>&,Event*)> onTouchesEnded;
  4. std::function<void(const std::vector<Touch*>&,Event*)> onTouchesCancelled;


三、测试事件监听器

1.新建COCOS项目

2,删除HelloWorld::init中的无用代码

添加以下代码

  1. TTFConfig tf("fonts/Marker Felt.ttf",36);
  2.  
  3. Label *label = Label::createWithTTF(tf,"Cliked me");
  4. label->setPosition(visibleSize / 2);
  5. addChild(label);
  6.  
  7. EventListenerTouchOneByOne *listener = EventListenerTouchOneByOne::create();
  8. listener->onTouchBegan = [](Touch *t,Event *e){
  9. if (e->getCurrentTarget()->getBoundingBox().containsPoint(t->getLocation()))
  10. {
  11. log("onTouchBegan");
  12. return true;
  13. }
  14. return false;
  15. };
  16. listener->onTouchMoved = [label](Touch *t,Event *e){
  17. log("onToucheMoved");
  18. label->setPosition(t->getLocation());
  19. };
  20.  
  21. EventListenerTouchAllAtOnce *listener1 = EventListenerTouchAllAtOnce::create();
  22. listener1->onTouchesBegan = [](std::vector<Touch *>ts,Event *e){
  23. log("onTouchesBegan");
  24. };
  25.  
  26.  
  27. Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraPHPriority(listener,label);
  28. Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraPHPriority(listener1,this);
运行即可。

猜你在找的Cocos2d-x相关文章