美文网首页cocos2d-x
cocos2d-x学习之--事件处理机制

cocos2d-x学习之--事件处理机制

作者: ys简单0 | 来源:发表于2017-02-09 15:49 被阅读209次

cocos2d-x的内部运行机制:由事件驱动的处理机制,所谓事件驱动,就是指只有当事件发生了,才会执行的对应的操作;例如,屏幕上有一个按钮,只有当玩家点击按钮时,才会调用对应的函数,否则,该处理机制的响应函数只处于等待调用的状态.在cocos2d-x当中,用户操作经过接收数据,分发事件处理响应3个步骤.
1.数据接收(Touch)
cocos2d-x所接收的数据都要作为统一的数据格式备操作和传递,cocos2d-x中的触摸类Touch就用来专门存储用户操作.每个Touch类的对象都包含了一个用户操作数据信息,保存了id标示,x坐标和y坐标.
重点代码如下:

//返回当前在openGL触摸位置坐标
Vec2 getLocation() const;
//返回之前在openGL触摸位置坐标
Vec2 getPreviousLocation() const;
//返回在openGL开始触摸位置坐标
Vec2 getStartLocation() const;
//返回当前触摸在屏幕坐标位置
Vec2 getLocationInView() const;
//返回之前触摸在屏幕坐标位置
Vec2 getPreviousLocationInView() const;
//返回开始触摸在屏幕坐标位置
Vec2 getStartLocationInView() const;
//设置用户操作数据(id标示,x坐标,y坐标)
void setTouchInfo(int id, float x, float y)
    {
        _id = id;
        _prevPoint = _point;
        _point.x   = x;
        _point.y   = y;
        _curForce = 0.0f;
        _maxForce = 0.0f;
        if (!_startPointCaptured)
        {
            _startPoint = _point;
            _startPointCaptured = true;
            _prevPoint = _point;
        }
    }

2.分发事件(EventDispatcher)
来自设备平台的的信息数据经过转化成为了Touch对象,cocos2d获得有效的用户操作数据之后,进入到分发事件步骤.EventDispatcher类表示一个事件分发器,作用是管理事件监听器以及事件分发,当一个事件触发时,它会向所有需要响应的对象发送用户操作信息.
常用函数如下:

//添加场景优先事件监听器,第一个参数是事件监听器对象,第二个参数是监听的节点对象
void addEventListenerWithSceneGraphPriority(EventListener* listener, Node* node);
//添加固定优先值的事件监听器
void addEventListenerWithFixedPriority(EventListener* listener, int fixedPriority);
//删除一个指定的事件监听器
void removeEventListener(EventListener* listener);
//删除某一类事件监听器
void removeEventListenersForType(EventListener::Type listenerType);
//删除所有监听器
void removeAllEventListeners();
//设置指定的事件监听器的优先级值
void setPriority(EventListener* listener, int fixedPriority);
//设置事件分发器是否可用
void setEnabled(bool isEnabled);
//检查是否启用了事件分发器
bool isEnabled() const;

3.处理响应(EventListener)
在明白分发信息机制后,我们肯定会想这些用户信息要分发到哪里去呢,分发器是怎么知道谁是需要响应的对象呢?接下来就来了解一下监听器类EventListener,从这个类的名字就可以看出,它就是一个需要接收用户操作信息的事件监听对象.那么事件分发器是如何将用户的操作信息分发到具体的监听器类的呢?咱们现在载回过头来看一下事件分发器的函数void addEventListenerWithSceneGraphPriority(EventListener* listener, Node* node)第一个参数就是EventListener的一个实例对象,开发者通过调用事件分发器EventDispatcher的这个函数将监听的器添加到事件分发器的集合列表中,而第二个参数Node就是具体的监听对象了.
需要注意的是:所有需要用户操作的监听对象必须在被添加到分发器结合列表之后,才可以接收到响应事件,简单点说就是必须通过函数addEventListenerWithSceneGraphPriority把监听事件添加到事件分发器的队列中才可以.
EventListener类是事件监听器的基类,主要使用的是他的6个子类

//单点触摸事件监听器
EventListenerTouchOneByOne
//多点触摸监听器
EventListenerTouchAllAtOnce
//加速度级事件监听器
EventListenerAcceleration
//按键事件监听器
EventListenerKeyboard
//鼠标事件监听器
EventListenerMouse
//自定义事件监听器
EventListenerCustom

接下来的文章将会着重介绍一下加速度计监听事件和触摸监听事件.

相关文章

  • cocos2d-x学习之--事件处理机制

    cocos2d-x的内部运行机制:由事件驱动的处理机制,所谓事件驱动,就是指只有当事件发生了,才会执行的对应的操作...

  • 第三章-nodejs基础知识

    本章将学习nodejs基础框架,分为五个部分:nodejs的控制台、事件处理机制、事件环机制、为事件指定事件以及取...

  • 基于回调的事件处理机制

    本节引言 在3.1中我们对Android中的一个事件处理机制——基于监听的事件处理机制进行了学习,简单的说就是 为...

  • Android的事件处理

    事件处理的定义 为用户动作(点击、触摸、按键等)提供响应的机制就叫事件处理机制 两套事件处理机制 1.基于监听的事...

  • 二十二、事件处理

    Android提供了强大的事件处理机制,包含两套事件处理机制:基于监听的事件处理:为Android界面组件绑定特定...

  • 高级UI<第三十三篇>:事件分发机制的简单理解

    在Android开发中,我们经常会处理到屏幕触摸事件,而事件分发机制就是处理屏幕触摸事件的基础。事件分发机制其实很...

  • 安卓事件传递机制

    事件传递机制 View dispatchTouchEvent():分发事件 onTouchEvent():处理事件...

  • 3.1 Android基于监听的事件处理

    1. 理解 事件监听机制是一种委派式的事件处理机制,事件源(组件)将事件处理委托给事件监听器,当事件源发生指定事件...

  • 事件分发机制(回顾概念篇)

    思考 在学习事件分发机制之前,我们需要考虑几个概念 什么是事件? 什么是事件序列? 什么是事件处理程序? 什么是事...

  • Node.js事件驱动机制

    使用事件驱动机制编写事件处理代码

网友评论

    本文标题:cocos2d-x学习之--事件处理机制

    本文链接:https://www.haomeiwen.com/subject/yugiittx.html