游戏设计模式 之 触发器

design.gif

引擎:CocoCreator2.1.0
语言:TypeScript
Git仓库地址:https://github.com/superXfx/GameDesignPatterns.git

定义——
在游戏开发中,触发器可以理解为“陷阱”,当“踩”到时,就执行一系列动作,例如扣血,减速,爆炸或者是加血,加速等正面效果也是可以的。
简而言之就是 触发-->Action 这两部分,新增触发器时只需编写 触发条件 和 动作 即可。

类图——


Trigger.jpg

从类图可以发现,业务上只需写一个继承TriggerBase的类,并实现Action()函数即可。
如果有更多的需求那么重写更多的基类函数即可,例如onExit() ,try()等
另外,TriggerMgr的update()由其所有者UIPlayScene驱动。

接下来看代码
1、基类 TriggerBase


image.png

首先注意,mLiveType变量,触发器有“一次性”,“重生”,“永生”三种类型,对应其在被触发后是否移除
自身的逻辑。
Action()和onExit()则分别对应触发时和离开触发器时(只对“永生”类型触发器的有意义)的逻辑,子类重写即可。


image.png

核心在这个try()中,其检测触发时调用Action()或是离开时调用onExit()
try()和_update()都是有TriggerMgr驱动的,后面具体讲

2、派生类,如TriSpeedUp,TriggerChangeHero等


image.png

image.png

可以看到,这两个派生类非常非常短,只是重写Action()并在其中执行加速、变形的操作而已。非常简洁。
至于其执行的操作是通过添加buff实现的,后面会专门写一篇关于buff系统的文章。

3、接下来是TriggerMgr类


image.png

可以看出,触发器是由mgr中的udpate()函数驱动的。

4、triggerMgr初始化与驱动


image.png

5、添加触发器


image.png

综上,整个触发器运行的流程就串起来了。
当需要新增触发器时,只需要写个继承TriggerBase的类,并重写其中的try(),Action()函数即可——对扩展开放,对修改关闭。

下一篇,游戏设计模式 之 Buff系统
https://www.jianshu.com/p/4756fc98fceb

你可能感兴趣的:(游戏设计模式 之 触发器)