新事件分发机制:
在2.x 版本事件处理时,将要触发的事件交给委托代理(delegate)处理,再通过实现代理里面的onTouchBegan等方法接收事件,最后完成事件的响应。而在新的事件分发机制中,只需通过创建一个事件监听器-用来实现各种触发后的逻辑,然后添加到事件分发器_eventdispatcher
,所有事件监听器有这个分发器统一管理,即可完成事件响应。
事件监听器有以下几种:
- 触摸事件 (EventListenerTouch)
- 键盘响应事件 (EventListenerKeyboard)
- 鼠标响应事件 (EventListenerMouse)
- 自定义事件 (EventListenerCustom)
- 加速记录事件 (EventListeneracceleration)
_eventdispatcher的工作由三部分组成:
- 事件分发器 Eventdispatcher
- 事件类型 EventTouch,EventKeyboard 等
- 事件监听器 EventListenerTouch,EventListenerKeyboard 等
监听器实现了各种触发后的逻辑,在适当时候由事件分发器分发事件类型,然后调用相应类型的监听器。
这里我们主要来了解Cocos2d3.x版本下的触摸事件中的多点触摸扩大缩放如何实现
void NewScene::ontouchesBegan(const std::vector<Touch*>& touches,Event *unused_event) { cclOG("began"); } void HelloWorld::ontouchesMoved(const std::vector<Touch *> &touches,cocos2d::Event *event) { //多点 if(touches.size() > 1) { auto distance1 = touches[0]->getPrevIoUsLocation().distance(touches[1]->getPrevIoUsLocation()); auto distance2 = touches[0]->getLocation().distance(touches[1]->getLocation()); float scale = sprite->getScale() * ( distance2 / distance1); scale = MIN(2,MAX(0.5,scale)); sprite->setScale(scale); } else { log("单点"); } } void NewScene::ontouchesEnded(const std::vector<Touch*>& touches,Event *unused_event) { cclOG("End"); }分发器中注册这四个方法就可以直接实现多点触摸。
OK.于Cocos2d的多点触摸的学习就分享到此,有讲得不对的地方还望指出进行探讨互相学习!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。