



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Indexer系统全面教程1. Indexer系统有什么用?做技能时 ,往往需要给单位绑定一些数据 ,比如做护盾类技能时需要绑定护盾能抵消的伤害值 ,做一些持续伤害的技能时需要给技能目标单位绑定伤害来源单位和每秒的伤害值 .目前常用的方法有全局变量、缓存和哈希表三种。全局变量有高效、方便使用的有点,只需要设置变量=xx 即可;缺点则是无法支持多人。市面上大多数支持多人的做法是采用全局变量数组,用玩家索引做数组索引。在控制单英雄的地图中可以起到很好的效果,但是对于需要支持更多单位、或者每个玩家多个单位的时候,就显得不够用。缓存和哈希表分别对应1.20 版本和 1.24 版本的魔兽。缓存需要使用r
2、eturn bug ,需要使用 jass 或自定义代码来存储数据;哈希表提供了GetHandleId 函数,但是在触发器中没有合适的接口,最后还是需要通过自定义代码或第三方we (比如 ydwe )提供的功能来使用,比较复杂。使用 Indexer 系统可以方便的记录很多数据,而且通过扩展,该系统可以支持位移系统等更多的功能。2. Indexer系统的原理Indexer系统是基于全局变量数组的记录方式。触发中有设置单位自定义值的功能,自定义值可以是任意整数,而且可以绑定单位而没有其他副作用。Indexer 系统通过一定的算法,使得每个单位都拥有不同的自定义值。这样,类似于利用玩家索引制作支持多人
3、的技能,可以将单位的自定义值作为数组索引来使得触发支持多人,可以支持任意玩家的任意多个单位(理论上只能支持 8191 个单位,但绝大多数地图上不会同时存在如此多的单位)。Indexer 系统在地图初始化时选取全地图的单位来设置不同的自定义值。之后通过单位进入可用地图区域来获取系统中新增的单位。由于单位进入可用地图区域事件有延时,所以需要新建的单位立刻进入系统时(比如弹幕、马甲持续攻击芙蓉面还),还需要一个新增单位的触发。当单位死亡时,判断是否为英雄单位。如果不是英雄,则可以移出 Indexer 系统。3. 简单的 Indexer系统制作一个最简单的Indexer 系统需要以下变量:其中, Fl
4、ag 表示当前 Indexer 中最大的自定义值。Group 将进入 Indexer 系统的单位放入单位组,避免单位重复进入(创建单位手动添加的情况下)。 Unit 数组将单位按自定义值作为索引添加到单位组,这样就可以通过单位自定义值来获取对应单位。 LocalIndex 是个临时整数,用来记录当前单位的自定义值。触发如下:将初始化地图中的单位添加到Indexer 系统中。这里利用数组的0 号索引作为临时的变量,不作为实际存储使用。获取当前单位后(这里是单位组循环中的选取单位),将 Flag 的值 +1 ,并作为单位的自定义值,即可保证每个单位的自定义值不同。该触发最后一行是给下一个触发添加事
5、件。下一个触发里直接设置事件也可以。游戏中动态进入地图的单位添加到Indexer 系统中。和上一个触发原理相同。手动添加单位进入的触发。需要先设置 Index_Unit0 为需要添加的单位,然后运行 AddIndex 触发器(无视条件)。原理同上。死亡的单位移出Indexer 系统。无论死亡的单位是不是拥有最大的自定义值,Flag的值都需要 -1.4. 增强的 Indexer系统4.1 给 Indexer 系统添加更多更复杂的功能新建了如下触发。这里是给进入 Indexer 系统的单位注册受伤害事件,通过这种方式做到捕获任意单位受伤害。之后还需要改造一下前面的触发:手动添加单位的时候就不需要再
6、运行触发了,一般这种情况都不需要动态做,如果需要,自己再加上运行触发即可。4.2 学着自己添加一个新功能我想做一个检测单位移动速度变化的触发。如下所示。新建了一个变量我用 New_Speed 变量记录单位移动速度,然后每0.01 秒与单位当前移动速度做比较。但是这么做还不够!还存在着不少bug !首先:给一个不确定大小或很大的数组设置数组大小是不明智的(大家都懂的!)。而变量如果不设置初始值,就会发生一个现象:访问到未赋值变量时,触发就会中断。到选中的这一行时就已经运行不下去了。同时整个循环也都无法继续。这时候上面创建的 AddExFunction 触发就开始发挥作用了。在这个触发添加这一行即
7、可避免变量未赋值导致的函数中断。这样就结束了么?当然没有。在单位死亡移出 Indexer 系统时,单位的自定义值发生了变化,因此这里还需要加一行。这个方法虽然管用。但是也面临着一个缺陷,随着自己添加的功能逐渐增加,单位死亡时需要重新赋值的变量也会相应增加,导致 ExitIndex 触发越来越复杂。为了避免这个状况,这里引入了双 Indexer 。4.3 双 Indexer 的原理及使用方式对上节出现的问题提出一个双Indexer 的解决方案。方案原理为采用一个数组来记录单位对应的数组索引,而不是简单的采用单位自定义值,这里简称这个单位对应的数组索引为“索引”。这个数组被称作双Indexer 数
8、组,简称D 数组。 D 数组为一个整数数组,默认的值即是数组索引,例如a1=1,a2=2以此类推。当然D数组初始化是没有赋值的。D 数组赋值的长度为Indexer 系统曾经达到的最大单位自定义值。超出现有长度而新赋值的变量值一定是索引值,而已经赋值过的部分将会产生变化。原本的 Indexer 系统双 Indexer 系统可见,只需要改变 D 数组中数字的排列顺序,就可以使得系统中单位排列紧凑,避免更改其他数组的值。同时通过索引获取对应单位也需要新建一个单位数组来记录。双 Indexer 系统新增了 3 个变量, Flag2 、Index 和 Search。其中 Flag2 数量)大于是用来记录
9、 D 数组初始化过的最大索引,当Flag2 时,就需要给D 数组赋值。 IndexFlag 值( Indexer 系统中单位整数数组就是D 数组。 Search 数组和Index数组是个互反的数组,即Indexb=c,则Searchc=b。这样就可以通过UnitSearch 索引 获得索引值对应的单位。三个将单位添加到Indexer 系统中的触发都做相应变化。单位移出系统时的触发。看起来很长,其实就是数组中的两个值互换赋值。5. Indexer位移系统如果要说 Indexer 位移系统与其他位移系统的区别,有两个主要的区别:1 是采用中心计时器来进行位移,效率高,可以支持同时位移的单位数量更多
10、2 是通过全局变量和运行触发(无视条件)可以轻松的设置单位在位移路径中或位移结束时的额外效果,比如沿途伤害、到达目标点后晕眩周围单位等,甚至“碰到一个单位后停止位移并击退碰到的单位”这种比较复杂的功能也是可以的。位移系统的变量设置如下:我知道肯定被吓傻了。这里一一解释。Angle即角度,是指位移时下一点与当前位置的偏移角度,Dl则是偏移距离。During是一个常数变量,游戏过程中不会变化,用来设定位移系统的运行间隔,与单位位移的流畅度有关,一般推荐0.03 和 0.025 ,不推荐小于0.01 的值。 Group是正在位移的单位加入的单位组。每个间隔运行位移系统时都会对该单位组中的单位进行循环
11、位移。Index用来记录正在位移的单位的索引值。L 记录单位已经位移的距离,L0 则是单位位移过程的最大距离。P0 和P1 两个点变量用两点间距和两点夹角来计算单位位移的距离和角度,开始位移和位移过程中都会用到。Pathable 和 PItem 是位移系统内部包含的一个可通行判断系统的变量,后面再说。TriggerB和TriggerC分别是位移过程中和位移结束时运行的触发。Tu是朝着单位冲锋时的目标单位。 TX 和 TY 记录位移过程中一次位移改变的位移的方式(目前只有对点位移和对单位位移,值分别为xy 坐标值。0和1)。Type用来区分位移系统的触发如下:触发事件不能直接用变量,这是用变量设
12、置触发的正确方式。循环单位组,并判断位移方式。Index_Index单位自定义值 就是双 Indexer 系统获取单位索引的方法。U 和 Index 两个变量都作为全局变量传参,用于Movement1 、 2 触发。对点位移的触发。 L 每次运行增加 Dl,当 L>=L0 时则位移结束,运行触发 TriggerC 。否则运行 TriggerB 。这里用 P0 极坐标位移至 P1 来获取位移的目标点。也可以直接坐标运算。由于 Indexer 位移系统本身效率就较高,所以不考虑坐标运算和点运算这点效率。向着单位位移有点不同。需要的变量为目标单位Tu 和每次位移的距离Dl。其他的都是计算单位坐
13、标的临时变量。这里的64 是两个单位的碰撞范围之和(一般单位的碰撞为 32 左右),强迫症患者可以枚举下单位碰撞。下面介绍一下碰撞判断系统。这里只判断地面单位可通行,即移动类型为地面的单位所能通过的地形。这里利用创建物品的坐标与物品实际坐标之差小于3 来判断是否可通行。注意这里的碰撞检测包含了树木的碰撞。如果沿途破坏树木,可以在TriggerB 触发中破坏树木然后动态的检测碰撞。位移系统的演示如下:这里大部分都是给变量赋值,复杂一点的敌法在中间的循环部分。作用是检测单位到位移目标点的路径上距离目标点最近的一个可通行地面。这样可以很好的防止单位位移后卡在地形里面不能动。NullTrigger 就
14、是这货,如其名称,啥都没,即位移结束后啥也不干。TriggerB 的函数。就是在位移途中检测范围内敌军单位。如果检测到就给个伤害和马甲晕。移除Group 即结束位移。对单位的冲锋就简单多了。不过这里并没有考虑地面碰撞。一般情况冲锋的目标单位也是地面单位,所以冲过去一般就在可通行地面。发生问题的几率不高。这里是可以同时对敌军友军的闪电链。冲锋结束后判断是敌军就给伤害。如果冲锋的不是触发单位,而是新建的一个马甲单位,需要手动加进 Indexer 系统,因为单位进入可用区域事件延时。直接获取单位取到 Indexer0 的值。Indexer会获Buff 系统教程1. Buff 系统是什么Buff 系统
15、是模拟技能给单位添加一定时间的持续效果的系统。这里通常使用龙卷风减速光环( Aasl)作为添加 buff 的模板技能。减速光环的优越性在于光环技能可以设定不同的 buff 且不同 buff 可以同时存在,同时减速光环没有技能图标,因此不需要像添加其他技能(如暴击,闪避)一样将技能放进魔法书并禁用。这里的 buff 系统功能包括添加某个技能一段时间(包括但不局限于龙卷风减速光环)并且在删除技能的同时删除魔法效果。以及单位死亡时移除添加的技能。移除技能时可以选择一个特殊效果(比如护盾技能结束后回复生命值)。由于是光环模拟 buff ,因此没有 buff 图标闪烁的功能。2. Buff 系统的构成B
16、uff系统所需的变量如上所示。其中During是Buff系统检测Buff剩余时间的间隔(这里使用一个中心计时器以提高系统效率),和位移系统一样,默认采用0.03 秒周期。 Unit 是添加技能的单位, Id 是添加的技能, Buff 是技能持续时间结束时需要删除的技能 buff , Time 是记录添加技能的剩余时间, Trigger 是技能结束时运行的触发,Flag 代表 Buff 系统当前的 Buff 上限 .Loop 用来当做 Buff 系统循环判断时的数组索引.Buff系统所用到的触发如下:Buff 系统的初始化触发.类似于位移系统 ,通过触发添加事件将变量During 作为计时器循环
17、的周期 .主要触发.上面的循环是判断Buff是否到期。下面的循环是从Buff系统的数组中移除已经结束的Buff (这里将Unit数组的值设为没有单位来标记Buff结束)。判断 Buff 剩余时间的触发。没啥好说的,简明易懂。添加 Buff 的触发。这里分别将添加buff 的单位、添加的技能id、技能的 buff 、持续时间赋值给为Unit0,Id0,Buff0,Time0,然后运行触发即可。演示如下这是给单位添加 0.5 秒粉碎的方式。 Buff 设置为拔树,当做是空 Buff 。为了避免冲突也可自己新建一个空 buff 。移除单位 Buff 的触发。如果不是强调Buff 在单位死亡的瞬间有特殊功能,可以无视这个触发。因为Buff 系统在循环判断时也有移除死亡单位buff 的功能。3. Buff 系统的应用示范这里用斧王的反击螺旋为例做示范。这里制作的反击螺旋在触发的最小间隔(这里是0.55 秒)内英雄身上是没有魔法效果的(dota 里面反击螺旋学习是用辉煌光环,因此单位身上有buff )。首先技能设置:用专注光环做转的学习模板,记住光环的目标允许自己。魔法效果、文本等由于是演示,所以并未作更细致的模仿。从上面那个技能复制一个过来。目标允许改完“没有”即可让buf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 营商环境竞赛试题及答案
- 丰台区家具运输合同范例
- 中心村管护合同样本
- 别墅发包合同范例
- 车载电动系统技术分析试题及答案
- 写门窗合同范例
- 《新能源汽车电池管理技术》课件
- 食工原理期末试题及答案
- 生物化学与生命科学试题及答案
- 《磁场效应》课件
- 面肌痉挛的健康宣教
- 超滤反渗透调试方案
- 外籍人员个人所得税讲义课件
- 02区域分析与区域规划(第三版)电子教案(第二章)
- LED制程与工艺介绍
- 《马克思主义中国化思想通史》导读-南京林业大学中国大学mooc课后章节答案期末考试题库2023年
- 北京中考语文词语表
- 水资源利用智慧树知到答案章节测试2023年西安理工大学
- 水质对干豆腐品质的影响机制及调控技术
- LY/T 2676-2016半干旱地区灌木林平茬与复壮技术规范
- 装配式混凝土结构的构件安装分项工程(验收批)质量验收记录表
评论
0/150
提交评论