示例11:事件和自定义事件
事件
事件用于表示操作的发生(如按键按下、鼠标点击),或是一些逻辑响应(如玩家连入、单位死亡)。星火编辑器提供了很多的事件来满足开发者在某个时机执行某个特定逻辑的需求。例如:"游戏-开始时"事件对应的是游戏开始时执行的逻辑;"单位-进入区域时"事件对应的是单位进入特定区域时执行的操作。
自定义事件
尽管编辑器内提供了多种多样的事件,但官方提供的事件并不完全满足游戏逻辑的需求,比如:刷怪完成时、界面更新时等。这时候就需要创建并使用『自定义事件』了。有关自定义事件的介绍和详细说明,请参考这篇文档。
接下来可以通过下面的两个例子来进一步了解自定义事件。
进入区域时,客户端显示面板
准备工作:在界编中新建一个面板,并设置其可见性为隐藏,这里的面板为MainPage中“我的面板”
-
在服务端创建发送到客户端的事件。注意:为了向客户端传递事件,需要在服务端的自定义事件中勾选自动转发到客户端/服务端选项
注意:事件的发送者只能是游戏、玩家、单位、物品、任务、区域、技能等,其他类型(比如自定义类)无法作为发送者来发送事件。
-
服务端新建一个触发器,用来转发“区域-进入时”事件(此事件需要通过『选择地编区域』语句选择具体区域)
-
在客户端中,新建一个触发器,并监听服务端发过来的自定义事件
-
通过面向对象的方式,显示在界编中创建好的面板
调试结果如下:
按下按钮后,服务器跳转场景
接下来我们 来实现一个例子,点击跳转按钮的时候会显示一个面板,点击是会跳转场景,点击否会隐藏面板:
-
在客户端创建以下三个事件:跳转场景、隐藏面板、显示面板。
-
在界编中添加一个面板,里面放入提示文字以及“确认”和“取消”按钮(注意将面板这一层的控件隐藏掉)。
-
绑定“确认”和“取消”按钮的点击事件,这里需要分别发送跳转场景事件和隐藏面板事件,供客户端触发器监听使用。
确认按钮事件
取消按钮事件
到这里,界面部分就已经处理完毕,下面是服务端和客户端逻辑的编写:
-
在服务端监听『跳转场景事件』,进行场景的加载和跳转操作,之后向客户端发送『跳转后隐藏面板事件』(该事件为服务端事件)。
-
将刚才在界编中创建的面板用全局变量存储,方便后续逻辑获取这个面板。
-
分别监听显示面板和隐藏面板的操作,并通过面向对象的方式设置面板的显示与否。
到这里我们所有的逻辑都已经完成,接下来我们看看调试结果:
注意:自定义事件虽然方便,但不要在游戏中滥用过多跨端传输的事件,也不要在自定义事件中放入过多数据,这会造成服务器负载上升,对游戏的流畅度造成一定影响。