博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
quick lua下自定义事件处理
阅读量:6814 次
发布时间:2019-06-26

本文共 2168 字,大约阅读时间需要 7 分钟。

hot3.png

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进行处理了。

转载于:https://my.oschina.net/u/223340/blog/373262

你可能感兴趣的文章
匹配除中文和空格意外的正则写法
查看>>
maven parent version not found
查看>>
Oracle 12c agent install for windows
查看>>
Java 扫描包下所有类(包括jar包)
查看>>
VBS弹出来的对话框如何置顶!--果然技巧
查看>>
什么是Satoshi?和比特币中本聪有什么关系?
查看>>
iOS开发frame, contentSize, contentOffset, contentInset 区别联系浅析
查看>>
限流算法之漏桶算法、令牌桶算法
查看>>
排序算法 - 冒泡排序
查看>>
讨论一个堆栈越界的问题
查看>>
再次简单明了总结flex布局,一看就懂...
查看>>
dubbo源码解析(二十六)远程调用——http协议
查看>>
如何在账号之间迁移阿里云ECS
查看>>
# 每日两道前端面试题 #
查看>>
浅析webpack源码之前言(一)
查看>>
js设计模式--发布订阅模式
查看>>
手把手教你用koa+mongoodb实现自己的接口
查看>>
项目管理与需求变动的探讨
查看>>
未来你是CTO还是架构师?
查看>>
2018年11月TIOBE编程语言排行榜,Java稳居第一
查看>>