Cocos2d-x之事件分发机制

本文深入探讨了事件分发机制,包括事件监听器、事件分发器和事件对象的基本概念。详细介绍了五种事件监听器的功能及如何通过设置监听器优先级来控制事件的处理流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

事件分发机制

EventDispatch事件分发是响应用户事件的机制,基本组成:

  1. 事件监听器封装了我们事件的处理代码
  2. 事件分发器通知用户事件的监听器
  3. 事件对象包含事件的信息

有五种事件监听器:

  1. EventListenerTouch:响应touch触摸事件
  2. EventListenerKeyboard:响应键盘事件
  3. EventListenerAcceleration:响应加速度计事件
  4. EventListenMouse:响应鼠标事件
  5. EventListenerCustom:响应自定义事件

当你有一个监听器并且你想要一个对象接受它被给予的事件时,你必须吞下它。 这样它就不会被传递给优先级从高到低的其他对象。这很容易做到:

// When "swallow touches" is true, then returning 'true' from the
// onTouchBegan method will "swallow" the touch event, preventing
// other listeners from using it.
listener1->setSwallowTouches(true);

// you should also return true in onTouchBegan()

listener1->onTouchBegan = [](Touch* touch, Event* event){
    // your code

    return true;
};


事件优先级

EventDispatcher事件分发器使用优先级决定哪个监听器首先得到一个事件。

  • Fixed Priority(固定优先级)是一个整型值。值较低的事件监听器要比值较高的事件监听器先处理事件。
  • Scene Graph Priority(场景优先级)是一个指向Node(节点)的指针。其节点具有较高z阶值(即绘制在顶部)的事件侦听器在其节点具有较低z阶值(即绘制在下面)的事件侦听器之前接收事件。这确保了触摸事件,如我们所预期的那样,从前往后传递。
    在这里插入图片描述
    当使用场景图优先级时,实际上是在树的上方向后移动。如果一个事件被触发,H会看一眼,要么吞下它,要么让它传递给I。同样的事情,我要么消耗它要么让它传递给G,以此类推,直到事件被它吞没或者没有得到回应。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值