quick lua下自定义事件处理

Quick-Cocos2d-x中的事件机制在官方的文档中已经讲解得很清楚了,查看这里

这些方法能处理绝大多数的事件,但如果要实现自定义的事件(例如我们自己实现一个类,对该类添加自定义的事件处理)就需要对类进行扩展了。

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

首先认识一下类EventProxy,就是这个类实现了自定义的消息处理

该类有四个函数,分别是:

  • 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

最重要的是这句


1

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对象,


1

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

让exNode对象监听自定义的事件,从这句可以看到我们监听的事件信息名称为MY_NEWS(即EXNode中按钮点击后发送的自定义消息),回调函数为EventScene的onMynews函数。

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

时间: 2024-08-29 12:59:18

quick lua下自定义事件处理的相关文章

Cocos2d-x下Lua调用自定义C++类和函数的最佳实践 -- 转

原地址: http://blog.segmentfault.com/hongliang/1190000000631630 Cocos2d-x下Lua调用自定义C++类和函数的最佳实践 关于cocos2d-x下Lua调用C++的文档看了不少,但没有一篇真正把这事给讲明白了,我自己也是个初学者,摸索了半天,总结如下: cocos2d-x下Lua调用C++这事之所以看起来这么复杂.网上所有的文档都没讲清楚,是因为存在5个层面的知识点: 1.在纯C环境下,把C函数注册进Lua环境,理解Lua和C之间可以

Lua调用自定义C++类

弄了一天终于会Lua调用自定义C++类.不容易啊. 我的电脑是64位的,装了64的Python不行,装了32位的就可以了,靠!下面是报错信息 python pyyaml Cheetah全都是装32位的,其中python版本是用2.7.8,是可以的. Cocos2d-x v3.2 Cocos Code IDE 1.2.0 NDK r9d dos2unix,windows下可能在执行脚本时有这个错误.是创建项目时没有了这个文件,可以去cocos2dx里面复制一个,如 E:\cocos2d-x-3.2

CC3.2+Lua(8) ——Lua调用自定义C++类

[唠叨] 本节要讲的是如果将自己写的C++类注册进Lua环境,让Lua去调用自定义的C++类. 网上有很多都是用原始的tolua++工具来注册C++类的,我看了很多这样的教程,感觉操作起来十分麻烦,而且也很难看懂他们到底在讲什么. 其实,在cocos2dx v3.2版本中,提供了bindings-generator脚本来封装toLua++的用法,从而节省了工作量. [致谢] http://segmentfault.com/blog/hongliang/1190000000718145 (讲得非常

1.2异常处理和服务配置、aop、日志、自定义事件处理

一.异常处理 2.1.数据验证 现在假设说要进行表单信息提交,肯定需要有一个表单,而后这个表单要将数据提交到 VO 类中,所以现在的基本实现如下: 1. 建立一个 Member.java 的 VO 类: package cn.study.microboot.vo; import java.io.Serializable; import java.util.Date; @SuppressWarnings("serial") public class Member implements S

Ubuntu 下自定义shell

Ubuntu下自定义shell一般包括主机名和文件目录,当打开的文件过多时,整个shell就变得很长从而影响视觉. 在终端中输入 $ echo $SP1 可以知道shell的默认样式如:\[\e]0;\[email protected]\h: \w\a\]${debian_chroot:+($debian_chroot)}\[email protected]\h:\w\$ 具体每个字符代表的含义此网站有详细介绍 http://billie66.github.io/TLCL/book/chap14

SharePoint _layouts下自定义程序页面权限管理

在sharepoint中,_layouts下的自定义页面没有特别的权限,只要用户能访问sharepoint站点就可以访问_layouts下的自定义程序页面,现在我们需要给自定义页面做一下权限认证.要求如下: 1)自定义程序页面只为特定的站点服务,如图: 我们的自定义页面只为docs站点服务,只有/docs/_layouts/15/这样的访问路径才是合法的. 2)能访问docs站点的用户不一定就可以访问该页面,所以我们需要给该页面配置一个权限管理的list,如图: 3)有些自定义程序页面比较特殊,

Lua 下实现一个简单的消息队列

Lua 下实现一个简单的消息队列,如下简单的几条代码就可以了. local q1 = {} local q2 = {} -- 产生消息只需要 table.insert(q1, msg) -- 分发消息需要两层循环, 可以处理 dispatch 过程中产生的新消息 while q1[1] do q1,q2 = q2,q1 for i=1,#q2 do dispatch(q2[i]) q2[i] = nil end end

Lua下通过元表模拟OOP编程,继承多态

Lua本身是没有以明确的定义来支持OOP编程的,但是我们却可以通过Lua内核提供的一些特性来间接实现简单的面向对象的编程. 通过Lua中的 table结构  metatable 以及函数可以配合实现OOP,以及继承.这些说白了都是一种伪实现,不建议在Lua下使用多重继承 . 在LUA中你想要 强制实现OOP 你必须需要懂一下几个关键词!! 什么是语法糖? 语法糖即糖衣语法,C/C++升级过程中的面向对象 整体就是一种语法糖 ,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)

cocos2d 2.x在opengl es 2.0 下自定义着色器来创建特别酷的特效(译)

cocos2d 2.x在opengl es 2.0 下自定义着色器来创建特别酷的特效(译) (2012-12-24 13:22:17) 转载▼ 标签: it cocos2d opengl 着色器 渲染 翻译:弹涂鱼 PS:欢迎加入开发群:285275050 本文翻译自:http://www.raywenderlich.com/10862/how-to-create-cool-effects-with-custom-shaders-in-opengl-es-2-0-and-cocos2d-2-x#