游戏设计模式 之 触发器

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 3. 类设计者工具 3.1 拷贝控制 五种函数拷贝构造函数拷贝赋值运算符移动构造函数移动赋值运算符析构函数拷贝和移...
    王侦阅读 1,878评论 0 1
  • 小编费力收集:给你想要的面试集合 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JA...
    八爷君阅读 4,656评论 1 114
  • 所有知识点已整理成app app下载地址 J2EE 部分: 1.Switch能否用string做参数? 在 Jav...
    侯蛋蛋_阅读 2,507评论 1 4
  • 1、面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标...
    michaelgong阅读 851评论 0 1
  • 青春如梦,每个少男少女编织着,酝酿着自己的七彩梦;青春如歌,每个人都是作曲家,谱写一首首青春之歌。于我而言...
    勤洁洁阅读 663评论 0 3