在网络游戏中,常常出现一种剧情副本的情况。比如玩家进入游戏后,提示“少侠,欢迎来到新手村,最近野猪一直在骚扰村子,你去打几只吧”。然后镜头移向野猪,野猪做出暴怒的表情。玩家走过去杀死野猪后,将玩家传至主城。
这个剧情比较简单,实际情况可能要比这复杂的多。在程序中,如何做统一处理呢?
先写一下大体思路
我们采用配置的方法,简单来说,前台是基于事件组的节点,后台是调用场景的lua脚本内的函数与前台交互。
后台向前台发送groupID(事件组ID),前台播放本组内的所有事件。事件内包含属性(即参数)。如果向下执行带有条件判断,比如杀某怪后发生某对话,则后台在判断玩家杀怪数后正确后,会向前台发移到某新group的消息,前台继续执行新的事件组。
根据“对添加开放,对修改关闭”的原则,我们将前台的每个事件处理类分到不同的类处理,并继承同一个父类。
后台使用lua写各种的处理函数,如杀怪。当杀怪后,C++将调用lua文件内的函数,函数内部判断如果杀的怪ID是某特定ID,则lua调用C++代码里的发送下个group的消息。前台收到后,则继续执行。