# 事件简介

事件依赖于系统,事件需要系统才能监听触发,因此在使用事件之前需要先拥有自己的系统system。事件分为 定义事件、监听事件、反监听、发布事件和响应事件。

  • 定义事件

定义事件分为引擎定义的事件和自定义事件。引擎定义的事件不需要定义可以直接使用。自定义函数DefineEvent.

  • 监听事件

监听事件的含义是将回调函数注册到事件上,当事件发生时主动调用该回调函数。监听函数ListenForEvent.

  • 反监听事件

监听完毕后需要自行反监听该事件在System的Destroy函数中。反监听函数UnListenForEvent.

  • 发布事件

发布事件是指,在事件发生时发布这个事件通知所有监听了这个事件的回调函数。引擎定义的事件会在引擎事件发生时自动发布,自定义事件的发布需要先DefineEvent后才能发布,需要先CreateEventData创建事件数据,发布函数有BroadcastEvent / NotifyToClient / BroadcastToAllClient / NotifyToServer.

  • 响应事件

上述的发布事件很多都是广播,但是不是每条消息都需要每个system都处理,因此响应函数只会响应那些监听了这些事件且消息源有发布这些事件的时候才会响应。

响应函数会响应在监听事件时ListenForEvent的参数中的回调函数。回调函数会传入参数dict,不同事件的参数在下面具体事件中进行了说明,其中部分参数是可设置参数,可以通过修改值来改变事件的结果。

  • 示例
class MyClientSystem(ClientSystem):
	def __init__(self, namespace, systemName):
		ServerSystem.__init__(self, namespace, systemName)
        # 注册监听
		self.ListenForEvent(clientApi.GetEngineNamespace(), clientApi.GetEngineSystemName(), 'AddEntityEvent', self, self.OnAddEntity)
		self.ListenForEvent(clientApi.GetEngineNamespace(), clientApi.GetEngineSystemName(), 'ClientJumpButtonPressDownEvent', self, self.OnClientJumpButtonPressDown)

    # 监听回调函数
    def OnAddEntity(self, data):
    	entityId = data["id"]
    	logger.info("AddEntityEvent callback... data: %s" % data)

    def OnClientJumpButtonPressDown(self, data):
    	# continueJump是可设置参数,可设置是否执行跳跃逻辑
    	data["continueJump"] = False

请勿对引擎事件的回调参数添加自定义的key,如有需要利用回调参数的字典做其他逻辑,请进行拷贝,例如:

	# 某回调函数
	def OnAddEntity(self, data):
    	myData = {
    	    "id": data["id"],
    	    "myKey": "myValue"
    	}
    	do_something(myData)