python自定义事件event的含义_事件Event详解

简介

事件模型很多编程语言中都有广泛的应用,在饥荒中也一样。许多component在执行一些核心函数时都会顺带触发事件,比如combat在攻击到目标是就会触发onhitother事件。这时候如果监听该事件,就能在完成攻击的同时附加一些特殊效果,比如附带闪电伤害之类的。

一个事件模型有三个组成部分:被监听对象source(也称为事件源),事件event和监听对象listener。

首先,由监听对象注册监听回调函数(Callback),当事件源触发了事件后,监听对象会收到事件源的信息,然后决定如何对事件源进行处理,简要流程如下图所示。

事件触发流程

在饥荒中,触发事件的函数是PushEvent(event,data)。

event是一个字符串类型,指明事件的名字。如果监听对象提前设置监听了这个事件,那么被监听对象触发这个事件时,监听对象就会执行提前设定好的处理函数。

data则是一张表,可以自由选择发生事件时的数据,记录在其中,然后传递给监听对象,也可以直接传递一个对象过去。

设置监听事件的函数是ListenForEvent(event,fn,source)。

event同上。fn是事件处理函数,固定有两个参数,第一个是被监听对象的引用,第二个是传递过来的数据表。source是被监听对象,此参数可以为空。如果为空,则系统会默认source是监听对象自身。也就是自己监听自己。这在饥荒中非常常见。需要特别注意的是,可以通过重复使用ListenForEvent设置多个监听器,即使其参数完全一致也可以。

有时候我们希望监听器只使用若干次,之后不再监听。那么,可以使用RemoveEventCallback(event,fn)来移除监听器。需要注意的是,这里的fn必须首先由ListenForEvent注册过,如果fn未注册,则会崩溃报错。这个函数同样可以重复使用,可以看作是ListenForEvent的逆函数。

以上的几个函数都是EntityScript类的成员函数。所以实际调用时,是这样写的:对象引用名:PushEvent(event,data) 或者对象引用名:ListenForEvent(event,fn, source) 或者 对象引用名:RemoveEventCallback(event,fn)

上面所提到的ListenForEvent是手动设置监听器,但其实还有另外一种特殊的,格式化了的监听器,EventHandler,参数只有event名和fn,没有source(因为已经默认了source就是监听对象自身了)。这个监听器通常是在StateGraph中被使用,用于转换prefab的State,这里不多提,等到以后讲StateGraph时再说。

应用场景

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值