【Cocos2d开发】浅析Cocoss2d下的多点触控-创新互联

新事件分发机制:在2.x 版本事件处理时,将要触发的事件交给委托代理(delegate)处理,再通过实现代理里面的onTouchBegan等方法接收事件,最后完成事件的响应。而在新的事件分发机制中,只需通过创建一个事件监听器-用来实现各种触发后的逻辑,然后添加到事件分发器_eventDispatcher,所有事件监听器有这个分发器统一管理,即可完成事件响应。

创新互联公司专注于企业营销型网站、网站重做改版、崆峒网站定制设计、自适应品牌网站建设、H5页面制作成都做商城网站、集团公司官网建设、成都外贸网站建设公司、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为崆峒等各大城市提供网站开发制作服务。

事件监听器有以下几种:

  • 触摸事件 (EventListenerTouch)

  • 键盘响应事件 (EventListenerKeyboard)

  • 鼠标响应事件 (EventListenerMouse)

  • 自定义事件 (EventListenerCustom)

  • 加速记录事件 (EventListenerAcceleration)

_eventDispatcher的工作由三部分组成:

  • 事件分发器 EventDispatcher

  • 事件类型 EventTouch, EventKeyboard 等

  • 事件监听器 EventListenerTouch, EventListenerKeyboard 等

监听器实现了各种触发后的逻辑,在适当时候由事件分发器分发事件类型,然后调用相应类型的监听器。

这里我们主要来了解Cocos2d3.x版本下的触摸事件中的多点触摸扩大缩放如何实现

[cpp] view plaincopy

  1. void NewScene::onTouchesBegan(const std::vector& touches, Event *unused_event)    { CCLOG("began"); }

  2. void HelloWorld::onTouchesMoved(const std::vector &touches, cocos2d::Event *event)

  3. {

  4.     //多点

  5.     if(touches.size() > 1)

  6.     {

  7.         auto distance1 = touches[0]->getPreviousLocation().distance(touches[1]->getPreviousLocation());

  8.         auto distance2 = touches[0]->getLocation().distance(touches[1]->getLocation());

  9.         float scale = sprite->getScale() * ( distance2 / distance1);

  10.         scale = MIN(2,MAX(0.5, scale));

  11.         sprite->setScale(scale);

  12.     }

  13.     else

  14.     {

  15.         log("单点");

  16.     }

  17. }

  18. void NewScene::onTouchesEnded(const std::vector& touches, Event *unused_event)    { CCLOG("End"); }

分发器中注册这四个方法就可以直接实现多点触摸。

OK.于Cocos2d的多点触摸的学习就分享到此,有讲得不对的地方还望指出进行探讨互相学习!

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网页标题:【Cocos2d开发】浅析Cocoss2d下的多点触控-创新互联
标题路径:http://ybzwz.com/article/ccdsjg.html