quick中自定义事件
quick中自定义事件
piggybear 发表于3年前
quick中自定义事件
  • 发表于 3年前
  • 阅读 10
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

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

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 3
博文 237
码字总数 37552
×
piggybear
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: