(转)quick中自定义事件

quick中的事件机制在官方的文档中已经讲解得很清楚了  查看这里
这些方法能处理绝大多数的事件,但如果要实现自定义的事件(例如我们自己实现一个类,对该类添加自定义的事件处理)就需要对类进行扩展了。

下面讲讲如何使用自定义(扩展)的事件机制。

首先认识一下类EventProxy,就是这个类实现了自定义的消息处理
该类有四个函数,分别是

?

1

2

3

4

addEventListener

removeEventListener

removeAllEventListenersForEvent

removeAllEventListeners

根据名字就能知道这几个函数的作用

下面以我们定义一个继承自Node的类来了解自定义事件的处理方法
定义类EXNode如下

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

local
EXNode = class("EXNode"function()

    return
display.newNode()

end)

function
EXNode:ctor()

    cc.GameObject.extend(self):addComponent("components.behavior.EventProtocol"):exportMethods()

    cc.ui.UIPushButton.new({normal = "button/button_normal.png", pressed = "button/button_selected.png"})

        :align(display.CENTER, display.cx, display.cy)

        :onButtonClicked(function()

            self:getChildEvent()

        end)

        :addTo(self)

end

function
EXNode:getChildEvent()

   self:dispatchEvent({name = "MY_NEWS"})

end

function
EXNode:onEnter()

    self:setTouchEnabled(true)

end

function
EXNode:onExit()

    self:removeAllEventListeners()

end

return
EXNode

最重要的是这句cc.GameObject.extend(self):addComponent("components.behavior.EventProtocol"):exportMethods()
该句为EXNode类添加了扩展的事件处理方法,现在我们可以使用EventProxy中的函数了,通过这些函数我们可以让EXNode接收到自定义的消息然后进行处理
在该类中我们创建一个按钮,用按钮来模拟我们游戏中的某些操作,当按钮按下的时候发送消息给其父节点EXNode,我们将该自定义的消息名字设置为MY_NEWS

我们在Scene中使用EXNode

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

local
EXNode = import("..class.EXNode")

local
EventScene = class("EventScene"function()

    return
display.newScene("EventScene")

end)

function
EventScene:ctor()

    self.exNode = EXNode.new()

    self.exNode:addEventListener("MY_NEWS", handler(self, self.onMynews))

    self:addChild(self.exNode)

end

function
EventScene:onMynews()

    printLog("INFO","父Node知道了子Node发送过来的消息")

end

function
EventScene:onEnter()

end

function
EventScene:onExit()

end

return
EventScene

在EventScene中创建一个EXNode对象,
self.exNode:addEventListener("MY_NEWS", handler(self, self.onMynews))让exNode对象监听自定义的事件,
从这句可以看到我们监听的事件信息名称为MY_NEWS(即EXNode中按钮点击后发送的自定义消息),回调函数为EventScene的onMynews函数

测试程序,点击按钮模拟游戏操作,在EXNode内部分发出名称为MY_NEWS的消息,之后exNode对象就能够接收到消息,然后调用回调函数onMynews进行处理了。

其实内容很简单,给新手入门用吧,大神自动忽略。

第一次尝试写这个,如有错误,希望大家指出。

来源:http://www.cocoachina.com/bbs/read.php?tid-235255.html

原文地址:https://www.cnblogs.com/wodehao0808/p/9071016.html

时间: 2024-10-05 05:04:54

(转)quick中自定义事件的相关文章

PB中自定义事件ID含义

PB中自定义事件ID含义 单选或多选按钮消息(前缀:pbm_bm) pbm_bmgetcheck 单选按钮或多选按钮是否被选. pbm_bmgetstate 按钮是否加亮. pbm_bmsetcheck 将无线按钮或确认框的选中状态改为未选中状态,反之亦然. pbm_bmsetstate 加亮或不加亮按钮. pbm_bmchange 改变按钮的风格,例如,改为单选按钮或组合框. 单选或多选按钮通知消息(前缀:pbm_bn) pbm_bnclicked 按钮控件被点中. pbm_bndisable

使用jQuery在javascript中自定义事件

js中的自定义事件有attachEvent,addEventListener等等好多种,往往受困于浏览器兼容,而且代码写起来也相当麻烦.jQuery为我们解决了这个问题,几行代码就可以很好的实现事件的各种传递. 例如,我要点击一个button,现在要将这个点击事件抛出来,从其他任何想要的地方去接收: 这个是button <button name="btn" onclick="clickbtn()">按钮</button> js: 1 var

1 .net中自定义事件的步骤

1 申明一个自定义的类并且继承事件的基类 public class ClientSocketModelConnectedEvent:EventArgs { private string param; public string Data { get { return param; } set { value = param; } } public ClientSocketModelConnectedEvent(string data) { this.param = data; } } 2 申明委

javascript中自定义事件

自定义事件:用户可以指定事件类型,这个类型实际上就是一个字符串,然后为这个类型的事件指定事件处理函数,可以注册多个事件处理函数(用数组管理),调用时,从多个事件处理函数中找到再调用. function EventTarget(){ this.handlers={}; } EventTarget.prototype={ constructor:EventTarget, addHandler:function(type,handler){ if(typeof this.handlers[type]=

JS中自定义事件的使用与触发

1. 事件的创建 JS中,最简单的创建事件方法,是使用Event构造器: var myEvent = new Event('event_name'); 但是为了能够传递数据,就需要使用 CustomEvent 构造器: var myEvent = new CustomEvent('event_name', { detail:{ // 将需要传递的数据写在detail中,以便在EventListener中获取 // 数据将会在event.detail中得到 }, }); 2. 事件的监听 JS的E

QUICK 中的触摸事件

本文转载于:http://www.cocos2d-x.org/docs/manual/framework/quick/V3/touch-events/zh Cocos2d-x 原本的触摸机制存在一些限制,在使用中需要开发者做不少额外的处理.所以 Quick-Cocos2d-x 提出了自己的一套触摸机制.本文详细介绍了这套新机制的用法. 显示层级 在 Cocos2d-x 里,整个游戏的画面是由一系列的 Scene, Node, Sprite, Layer 等对象构成的.而所有这些对象都是从 Nod

【转载】Quick 中的触摸事件

原文地址 http://cn.cocos2d-x.org/article/index?type=quick_doc&url=/doc/cocos-docs-master/manual/framework/quick/V3/touch-events/zh.md Quick 中的触摸事件 Cocos2d-x 原本的触摸机制存在一些限制,在使用中需要开发者做不少额外的处理.所以 Quick-Cocos2d-x 提出了自己的一套触摸机制.本文详细介绍了这套新机制的用法. 显示层级 在 Cocos2d-x

Unreal Engine 4 蓝图之自定义事件

UE4的蓝图就跟C++等编程语言在概念上是非常类似的.在蓝图中你可以定义变量.函数.宏等等,高级点的,它还可以被继承.这还不算,我们还可以定义蓝图接口,规范子类的行为.基本上C++中可以做的,蓝图也可以做到,而且是所见即所得,拖拖拽拽,即时编译,立即生效. 一般的做法是,程序员在C++中做好功能模块,关卡设计师,用蓝图创建游戏的逻辑,关卡师不需要会编程.可以自己创建逻辑,至少在逻辑这一层不需要程序员来配合.这样的效率会高很多,而且也没有类似Lua这样的脚本语言参与,设计师的门槛要低很多了. 这里

Vue:Axios异步通信、计算属性、内容分发、自定义事件

1. Axios 什么是Axios Axios 是一个开源的可以用在浏览器端和 NodeJS 的异步通信框架,她的主要作用就是实现 AJAX 异步通信,其功能特点如下: 从浏览器中创建 XMLHttpRequests 从 node.js 创建 http 请求 支持 Promise API [JS中链式编程] 拦截请求和响应 转换请求数据和响应数据 取消请求 自动转换 JSON 数据 客户端支持防御 XSRF(跨站请求伪造) GitHub:https://github.com/axios/axio