cocos2d-x学习笔记——EventDispatcher事件分发机制

本文介绍了cocos2d-x的EventDispatcher事件分发机制,讲解了如何创建事件并注册到事件管理中心,以及五种不同事件类型:触控、键盘、加速器、鼠标和自定义事件。此外,还提到了事件监听器的优先级和添加方式,特别是触摸、键盘、鼠标和加速计事件的处理。
摘要由CSDN通过智能技术生成

EventDispatcher 事件分发机制先创建事件,注册到事件管理中心 _eventDispatcher,通过发布事件得到响应进行回调,完成事件流。_eventDispatcher是Node的属性,通过它管理当前节点(场景、层、精灵等)的所有事件的分发。但它本身是一个单例模式值的引用,在Node的构造函数中,通过Director::getInstance()->getEventDispatcher(); 获取,有了这个属性,就能方便的处理事件。

有五种不同的事件机制:

  1. EventListenerTouch 响应触控事件
  2. EventListenerKeyboard 响应键盘事件
  3. EventListenerAcceleration 响应加速器事件
  4. EventListenMouse 响应鼠标事件
  5. EventListenerCustom 响应自定义的事件

优先级:

  1. addEventListenerWithFixedPriority(EventListener* listener, int fixedPriority) 中 fixedPriority 的值越低,则优先级越高。
  2. 若优先级相同。Layer 的z顺序高的(绘制于顶部的)层将优于z顺序低的层。这将保证了诸如触碰事件的自顶向下传播

  3. 注意:如果是固定优先值的监听器添加到一个节点(addEventListenerWithFixedPriority),那当这个节点被移除时必须同时手动移除这个监听器,但是添加场景图优先监听器到节点(addEventListenerWithSceneGraphPriority)就不用这么麻烦,监听器和节点是绑定好的,一旦节点的析构函数被调用,监听器也会同时被移除。

触摸事件:

void EventDispatcherTest::funEventTouch(Sprite* sprite)
{
    this->_eventDispatcher->removeAllEventListeners();

    auto listener = EventListenerTouchOneByOne::create();
    listener->onTouchBegan = CC_CALLBACK_2(EventDispatcherTest::onTouchBeganss,this);
    listener->onTouchMoved = CC_CALLBACK_2(EventDispatcherTest::onTouchMovedss,this);
    listener->onTouchEnded = CC_CALLBACK_2(EventDispatcherTest::onTouchEndedss,this);
    listener->onTouchCancelled = CC_CALLBACK_2(EventDispatcherTest::onTouchCancelledss,this);

    listener->setSwallowTouches(true);//是否向下传递

    this->_eventDispatcher->addEventListenerWithSceneGraphPriority(listener,sprite);
}

bool EventDispatcherTest::onTouchBegan
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值