1、函数回调
- void menuCloseCallback(Object* pSender);
- auto closeItem = MenuItemImage::create("CloseNormal.png","CloseSelected.png",
- CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
- void HelloWorld::menuCloseCallback(Object* pSender)
- {
- Director::getInstance()->end();
- #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
- exit(0);
- #endif
- }
2、Layer的touch消息响应
- //单点响应
- virtual bool onTouchBegan(Touch* touch, Event *event) override;
- virtual void onTouchMoved(Touch* touch, Event *event) override;
- virtual void onTouchEnded(Touch* touch, Event *event) override;
- virtual void onTouchCancelled(Touch *touch, Event *event) override;
- //多点响应
- virtual bool onTouchesBegan(Touch* touch, Event *event) override;
- virtual void onTouchesMoved(Touch* touch, Event *event) override;
- virtual void onTouchesEnded(Touch* touch, Event *event) override;
- virtual void onTouchesCancelled(Touch *touch, Event *event) override;
重写这些函数来对layer的点击做处理。当然,我们需要:
- setTouchEnabled(true)。
此外有个小改动。对于单点触控响应,可以调用:
- //设置为单点响应
- setTouchMode(Touch::DispatchMode::ONE_BY_ONE);
- //设置为多点响应(默认)
- setTouchMode(Touch::DispatchMode::ALL_AT_ONCE);
- 3、TouchEvent响应
这是新加入的响应方式。它主要是使用在UIWidget上的。可以将其看做是函数回调的一个扩展,为更多的响应处理提供可能。使用方法大致是:
- //声明
- void touchButton(Object* object,TouchEventType type);
- //挂接到控件上
- uiButton->addTouchEventListener(this,toucheventselector(HelloWorld::touchButton));
- //实现
- void HelloWorld::touchButton(Object* object,TouchEventType type)
- {
- LabelTTF* label;
- switch (type)
- {
- case TouchEventType::TOUCH_EVENT_BEGAN:
- label = static_cast<LabelTTF*>(getChildByTag(11));
- label->setString("按下按钮");
- break;
- case TouchEventType::TOUCH_EVENT_MOVED:
- label = static_cast<LabelTTF*>(getChildByTag(11));
- label->setString("按下按钮移动");
- break;
- case TouchEventType::TOUCH_EVENT_ENDED:
- label = static_cast<LabelTTF*>(getChildByTag(11));
- label->setString("放开按钮");
- break;
- case TouchEventType::TOUCH_EVENT_CANCELED:
- label = static_cast<LabelTTF*>(getChildByTag(11));
- label->setString("取消点击");
- break;
- default:
- break;
- }
- }
4、Listener消息响应方式
- auto dispatcher = EventDispatcher::getInstance();
- auto myListener = EventListenerTouch::create(Touch::DispatchMode::ONE_BY_ONE);
- //如果不加入此句消息依旧会向下传递
- myListener->setSwallowTouches(true);
- myListener->onTouchBegan = [=](Touch* touch,Event* event)
- {
- <span style="white-space:pre"> </span>//some check
- <span style="white-space:pre"> </span> if (pass)
- <span style="white-space:pre"> </span>{
- return true;
- }
- return false;
- };
- myListener->onTouchMoved = [=](Touch* touch,Event* event)
- {
- //do something
- };
- myListener->onTouchEnded = [=](Touch* touch,Event* event)
- {
- //do something
- };
- dispatcher->addEventListenerWithSceneGraphPriority(myListener,mySprite1);
- dispatcher->addEventListenerWithSceneGraphPriority(myListener,mySprite2);