Cocos2d-x 学习笔记(14.1) Event EventCustom EventListener
1. Event EventCustom
所有事件类继承了Event。
Event中的枚举,定义了事件的类型:
enum class Type
{
TOUCH, //触摸
KEYBOARD, //键盘
ACCELERATION, //加速器
MOUSE, //鼠标
FOCUS, //
GAME_CONTROLLER, // 游戏手柄
CUSTOM //用户自定义
};
Event成员变量:
Type _type; //事件类型
bool _isStopped; //事件暂停
Node* _currentTarget; //作用的node
Event构造方法:
Event::Event(Type type)
: _type(type)
, _isStopped(false)
, _currentTarget(nullptr)
{}
EventCustom是自定义事件。比Event多出的成员变量:
void* _userData; ///< User data
std::string _eventName; //自定义事件名
EventCustom构造方法事件类型Type设为CUSTOM。设置_eventName。
EventCustom::EventCustom(const std::string& eventName)
: Event(Type::CUSTOM)
, _userData(nullptr)
, _eventName(eventName)
{
}
3. EventListener
监听器有自己的类型ID,是对该类型ID事件的监听。事件只会被分发到同ID的监听器进行处理。
除了自定义监听器、触摸监听器,其他的监听器ID和事件类型一一对应。自定义监听器ID是自定义事件的事件名。触摸类型是一种,对应两种监听器。
监听器类有枚举,定义监听的事件类型,和Event相比将触摸拆分为单点触摸和多点触摸:
enum class Type
{
UNKNOWN,
TOUCH_ONE_BY_ONE, //单点触摸
TOUCH_ALL_AT_ONCE, //多点触摸
KEYBOARD,
MOUSE,
ACCELERATION,
FOCUS,
GAME_CONTROLLER,
CUSTOM
};
监听器成员变量:
std::function<void(Event*)> _onEvent; /// 处理传入事件的回调函数 Event callback function
Type _type; /// 事件类型 Event listener type
ListenerID _listenerID; /// 监听器ID Event listener ID
bool _isRegistered; /// 注册 Whether the listener has been added to dispatcher.
int _fixedPriority; // 监听器优先级,数值越大优先级越高
Node* _node; // 监听器关联的node scene graph based priority
bool _paused; // 暂停监听器 Whether the listener is paused
bool _isEnabled; // 是否启用 Whether the listener is enabled
监听器的init方法对成员变量进行初始化。
场景图监听器优先级固定为0,在add方法中自动设置。自定义优先级的监听器优先级不得为0。
监听器的暂停与否仅用于场景图优先级的监听器。自定义优先级的监听器的暂停标志一直为false。当自定义优先级监听器需要“暂停”,不接收事件时,调用setEnabled(false)即可。
4. EventListenerCustom
自定义事件的监听器有成员:
std::function<void(EventCustom*)> _onCustomEvent;
用create方法创建时,要监听的事件名作为监听器ID。回调函数作为_onCustomEvent。在init时,_onEvent被设为匿名函数:
auto listener = [this](Event* event){
if (_onCustomEvent != nullptr)
{
_onCustomEvent(static_cast<EventCustom*>(event));
}
};
该匿名回调函数是对我们设置的回调函数_onCustomEvent的包装,将事件类型转换成EventCustom。
Cocos2d-x 学习笔记(14.1) Event EventCustom EventListener的更多相关文章
- 【转】 C#学习笔记14——Trace、Debug和TraceSource的使用以及日志设计
[转] C#学习笔记14——Trace.Debug和TraceSource的使用以及日志设计 Trace.Debug和TraceSource的使用以及日志设计 .NET Framework 命名空 ...
- Ext.Net学习笔记14:Ext.Net GridPanel Grouping用法
Ext.Net学习笔记14:Ext.Net GridPanel Grouping用法 Ext.Net GridPanel可以进行Group操作,例如: 如何启用Grouping功能呢?只需要在Grid ...
- SQL反模式学习笔记14 关于Null值的使用
目标:辨别并使用Null值 反模式:将Null值作为普通的值,反之亦然 1.在表达式中使用Null: Null值与空字符串是不一样的,Null值参与任何的加.减.乘.除等其他运算,结果都是Null: ...
- golang学习笔记14 golang substring 截取字符串
golang学习笔记14 golang substring 截取字符串golang 没有java那样的substring函数,但支持直接根据 index 截取字符串mystr := "hel ...
- 学习笔记---Javascript事件Event、IE浏览器下的拖拽效果
学习笔记---Javascript事件Event.IE浏览器下的拖拽效果 1. 关于event常用属性有returnValue(是否允许事件处理继续进行, false为停止继续操作).srcE ...
- mybatis学习笔记(14)-查询缓存之中的一个级缓存
mybatis学习笔记(14)-查询缓存之中的一个级缓存 标签: mybatis mybatis学习笔记14-查询缓存之中的一个级缓存 查询缓存 一级缓存 一级缓存工作原理 一级缓存測试 一级缓存应用 ...
- Python3+Selenium3+webdriver学习笔记14(等待判断 鼠标事件 )
!/usr/bin/env python -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记14(等待判断 鼠标事件 )'''from selenium im ...
- 并发编程学习笔记(14)----ThreadPoolExecutor(线程池)的使用及原理
1. 概述 1.1 什么是线程池 与jdbc连接池类似,在创建线程池或销毁线程时,会消耗大量的系统资源,因此在java中提出了线程池的概念,预先创建好固定数量的线程,当有任务需要线程去执行时,不用再去 ...
- [C++学习笔记14]动态创建对象(定义静态方法实现在map查找具体类名对应的创建函数,并返回函数指针,map真是一个万能类)good
[C++学习笔记14]动态创建对象 C#/Java中的反射机制 动态获取类型信息(方法与属性) 动态创建对象 动态调用对象的方法 动态操作对象的属性 前提:需要给每个类添加元数据 动态创建对象 实 ...
随机推荐
- 微信支付JSAPI支付
1.介绍 JSAPI支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付.应用场景有: ◆ 用户在微信公众账号内进入商家公众号,打开某 ...
- 关于读写APP.config文件能读却写不了的问题
今天要求用winform写一个窗口用来读写一个App.config,要对 <appSettings>里面的add key和value进行添加和修改.要实现的效果图如下: -------- ...
- 【iOS】得到当前年、月、周的第一天和最后一天
在写一个记账软件,其中有个统计功能.比如,统计某月的支出,需要知道某天所在的月的第一天和最后一天,以便从数据库中根据时间取数据. 话不多说,上代码: // // EBDate.h // ChargeM ...
- 自定义构建基于.net core 的基础镜像
先说一个问题 首先记录一个问题,今天在用 Jenkins 构建项目的时候突然出现包源的错误: /usr/share/dotnet/sdk/2.2.104/NuGet.targets(114,5): e ...
- 利用Python制作二维码
利用简单的Python代码制作二维码 一.制作工具 安装Python环境 + PyCharm编译器. 二.电脑系统 本人win10 + Python3.7.0 + PyCharm. 三.写代码前先下载 ...
- Spring boot 梳理 - 在bean中使用命令行参数-自动装配ApplicationArguments
If you need to access the application arguments that were passed to SpringApplication.run(…), you c ...
- rpm -qa|grep nfs >/dev/null 2>&1作用
在使用一些shell命令是,经常会用到rpm -qa|grep nfs >/dev/null 2>&1之类的命令,该命令干嘛用的呢? 其实这个命令就是将rpm -qa|grep n ...
- Ubuntu 启动zookeeper报错
在启动zk客户端连接server时报错: 2019-03-30 23:06:24,915 [myid:localhost:2181] - INFO [main-SendThread(localhost ...
- springboot + mybatis + mycat整合
1.mycat服务 搭建mycat服务并启动,windows安装参照. 系列文章: [Mycat 简介] [Mycat 配置文件server.xml] [Mycat 配置文件schema.xml] [ ...
- Flask框架踩坑之ajax跨域请求
业务场景: 前后端分离需要对接数据接口. 接口测试是在postman做的,今天才开始和前端对接,由于这是我第一次做后端接口开发(第一次嘛,问题比较多)所以在此记录分享我的踩坑之旅,以便能更好的理解,应 ...