加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

【Cocos2d入门教程八】浅析Cocoss2d下的多点触控

发布时间:2020-12-14 16:21:18 所属栏目:百科 来源:网络整理
导读:新事件分发机制: 在2.x 版本事件处理时,将要触发的事件交给委托代理(delegate)处理,再通过实现代理里面的onTouchBegan等方法接收事件,最后完成事件的响应。而在新的事件分发机制中,只需通过创建一个事件监听器-用来实现各种触发后的逻辑,然后添加到

新事件分发机制:在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的多点触摸的学习就分享到此,有讲得不对的地方还望指出进行探讨互相学习!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读