————————————————————
如果你是个新手,现在讲一些复杂的触发器,基本上你会看不懂,所以咱们这章主要讲思想,这种抽象的东西可能会改变你未来的触发器风格,鲁迅曾经说过:“触发器要从娃娃抓起”,触发器风格一旦形成,在后天将难以改变,所以此章将带领各位新手走到正确的方向上,这对于你们以后的发展是大有裨益的。
触发器技术分为两个大类,一个是函数的运用,一个是算法与数据结构。前者是形,后者是神,只有形神兼备,才能打造顶级的触发器。形,即外在,这里指函数的运用,这是新手期作者主要的研究内容,只有熟悉各种函数的使用,才能在这个架子上搭载我们的“神”,即内在,它看不见,但是却是打破触发器瓶颈的那把唯一的锤子,就像内功一样,虽然无形,但却有质,这种东西需要在不断的作图中形成,而本教程将直接将这些知识灌输给你,希望你可以从中获得一点点启发。
本章讲的特殊玩法,是比较广义的,包含Boss、耐久和纯特殊玩法等等需要使用大量触发器的地图,关于Boss制作的教程,网上也有不少,我们这里就不做讲解了。
这里给出官方文档的Boss教程:
https://easydoc.net/s/85829661/USXlrH6u/jomA211r
好了,接下来看看本章咱们的知识点:
· 触发器的数据流
· 封装思想
· 数学
· 算法
· 数据映射
· 输入层、逻辑层、显示层
触发器的数据流
在研究数据流之前,我们先思考一下触发器的本质是什么,它有事件、有条件、有动作,综合来看,它是一种在指定时机下能自动执行的脚本(也就是动作)。事件和条件选择符合的时机,动作提供操作,所以触发器的数据运行全在动作中,这里的数据,指的是咱们上一章讲过的所有数据类型。



封装思想:
前面提到的“高内聚”实际上就是封装思想了,也就是将触发器当做一个盒子,把动作装进去,让数据流在其中流动,而这个盒子对外只有输入接口和输出接口,这种对触发器进行封装的思想,在特殊玩法中尤其重要。

但是!由于触发器和编程不同,编程上可以很好的应用这套标准,而触发器毕竟是不同于编程的,所以比如一些无需对外做信息交流的触发器则不需要输出,当然输入一般得有。而且更妙的是,多个触发器可以共同封装,封装也可以嵌套(套娃),如下图所示:

以下举例封装形式的触发器:
初始化时定义一个整数作为输入:



数学:
计算机为啥叫计算机?顾名思义,它能做的事就是计算,它干的最主要的事也就是对数字进行加减乘除(CPU)和存取(ROM/RAM),任意的程序或应用软件,都是基于数学的,一个程序,实际上本质就是对数字做运算,所以说,触发器也是如此,玩触发器到达比较高的层次后,基本上都是在玩数学。
千万不要觉得数学是枯燥的,因为你可能只是受到了9年义务教育的鞭挞,“享受”着数学课本里那些复杂的公式以及晦涩难懂的专业性语句(简称:不说人话)的熏陶,而这只是应试教育泛滥的结果。实际上,数学是非常美妙的,美的有时候你都不知道为什么会这么巧,有些公式虽然难以记忆,但是公式之间竟然有着出奇的一致性,即使它们的推导过程并不相同。生活在互联网时代,或者说是数字化时代,数学,是每个人都应该了解的一门“必修课”,如果你有幸在未来成为了触发器大佬,你也一定会感受到数学的强大魅力,因为强大的触发器,往往需要一些数学知识,你在以前学习的数学知识,可能真的可以在编辑器中得到应用,而不是仅仅被考试所践踏!
使用数学最多的玩法是耐久,耐久中的各种花式弹幕,其实就是一个个的数学函数描绘的。
比如爱心曲线的参数方程(其中,t为从0到2π):







算法:
算法,即计算方法,常用于纯特殊玩法中,当然算法一听名字就知道又是和数学相关,算法的百度解释是:解题方案的准确而完整的描述。这又是什么不当人的话??简单来说,算法就是根据一定的输入,经过一系列的计算流程,得到最终的输出结果,其实就跟解数学题目类似,题中给出已知条件,我们通过一系列的计算,能得到一个准确的答案,这个答案就是由已知的数据推导出来的输出,而算法,就是你的那些计算步骤。
借用Nicklaus Wirth博士的著名公式:程序 = 数据结构 + 算法。
数据结构是指数据之间的逻辑关系,这个在我们上面讲数据流时其实就已经描述了这一点,而算法是用来求解特定问题的步骤和方法。
可见算法是相当重要的东西,但其实在ic中,使用算法的地图并不多,因为大多数作者并不是专业的程序员,而实际上,如果会使用算法来做特殊玩法的作者,基本上都是大佬,因为算法是触发器的内功,学会再多的函数(招式),也不可能比得过具有深厚内功的。
那么算法在触发器里到底是个啥呢?现在,Konux还是以我的斗地主触发器为例子,给你们看看最简单的一种算法:



1.遍历原始数据,从第一个数开始,到倒数第二个数结束,比较这个数和下一个数的大小,如果这个数比下一个数大,则交换这两个数。这样便可以将数据中最大的数转移到数组的最后。
2.之后再次遍历原始数据,但是变为从第一个数开始,到倒数第三个数结束,比较这个数和下一个数的大小,如果这个数比下一个数大,则交换这两个数。这样便可以将第二大的数转移到数组的倒数第二位。
3.重复执行上述过程,一直到从第一个数开始,到第二个数结束,从而完成排序过程。
由于这个循环过程就像泡泡上浮的过程,所以被称为冒泡排序法。
可能不太好理解,我们接下来用上面的例子来演示整个排序过程。

首先我们把数组造出来,并用一个变量表示数组里的变量个数



完美排好序了!但是我们刚才说了,如果提前就排好序了,轮次如果还继续下去就会很蠢,所以我们要用一个变量来控制轮次在排好序后能直接结束

算法的世界是非常神奇的,希望你们能够加入其中,并享受实现算法的一瞬间带来的快感!
数据映射:
啥是数据映射?比如现在我们要做一个扫雷,该怎么入手呢?
你或许最先想到的是先寻找数字、雷、雷爆炸、标旗等素材,并且创建搭载这些素材的单位,用这些单位摆好扫雷的盘面,因为你会想着如果素材都不弄好就去做,最后做出来了成品,想要再去改单位或者素材就会非常麻烦了。
其实产生这种思维很正常,因为大多数人都是“面向单位写触发器”,也就是你做一个游戏,特别依赖于单位,但实际上,我做的扫雷根本不依赖单位运行,我一开始就没有找素材、摆单位,我直接就开始做扫雷的游戏逻辑了,那么这是怎么做到的呢?这就是通过数据映射的方式,我使用纯数学逻辑,构造了一个虚空的扫雷盘面,它只以数字的形式出现,使用触发器,操控的就是这些数据以进行游戏,正是因为这些数据是虚空运行,所以外界的环境对它造不成干扰,它一定是绝对正确的,除非是算错了。
我们来看看如何做数据映射:

还记得二维数组的形状吗?二维数组就是天然的矩形数据,所以二维数组就可以作为盘面的数据的载体了!(拿出上一章的图)

初始数据化完毕之后,我就紧接着开始用这些数据布雷(不需要看懂):

然后我们可以对这些数据做输出,看看效果

看看结果:


输入层、逻辑层、显示层:
这一部分将是上一个部分的延伸,数据映射是干了啥?其实它就是游戏的虚拟主体,游戏的玩法通过操控数据的方式运行,对数据做数学运算操作的层级叫做逻辑层,而一个特殊玩法,整体也需要封装为几个模块,分别就是输入层、逻辑层、显示层,接下来请看层级结构图。

好了,这就是本章的所有内容,希望看完后,你能对触发器产生颠覆性的认识,从而以后能更好的驾驭触发器!
编辑器新手入门交流与讨论可加入官方二群,群号:979717879