- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Indexer系统全面教程.docx
Indexer系统全面教程Indexer系统有什么用?做技能时,往往需要给单位绑定一些数据,比如做护盾类技能时需要绑定护盾能抵消的伤害值,做一些持续伤害的技能时需要给技能目标单位绑定伤害来源单位和每秒的伤害值.目前常用的方法有全局变量、缓存和哈希表三种。全局变量有高效、方便使用的有点,只需要设置变量=xx即可;缺点则是无法支持多人。市面上大多数支持多人的做法是采用全局变量数组,用玩家索引做数组索引。在控制单英雄的地图中可以起到很好的效果,但是对于需要支持更多单位、或者每个玩家多个单位的时候,就显得不够用。缓存和哈希表分别对应1.20版本和1.24版本的魔兽。缓存需要使用return bug,需要使用jass或自定义代码来存储数据;哈希表提供了GetHandleId函数,但是在触发器中没有合适的接口,最后还是需要通过自定义代码或第三方we(比如ydwe)提供的功能来使用,比较复杂。使用Indexer系统可以方便的记录很多数据,而且通过扩展,该系统可以支持位移系统等更多的功能。Indexer系统的原理Indexer系统是基于全局变量数组的记录方式。触发中有设置单位自定义值的功能,自定义值可以是任意整数,而且可以绑定单位而没有其他副作用。Indexer系统通过一定的算法,使得每个单位都拥有不同的自定义值。这样,类似于利用玩家索引制作支持多人的技能,可以将单位的自定义值作为数组索引来使得触发支持多人,可以支持任意玩家的任意多个单位(理论上只能支持8191个单位,但绝大多数地图上不会同时存在如此多的单位)。Indexer系统在地图初始化时选取全地图的单位来设置不同的自定义值。之后通过单位进入可用地图区域来获取系统中新增的单位。由于单位进入可用地图区域事件有延时,所以需要新建的单位立刻进入系统时(比如弹幕、马甲持续攻击芙蓉面还),还需要一个新增单位的触发。当单位死亡时,判断是否为英雄单位。如果不是英雄,则可以移出Indexer系统。简单的Indexer系统制作一个最简单的Indexer系统需要以下变量:其中,Flag表示当前Indexer中最大的自定义值。Group将进入Indexer系统的单位放入单位组,避免单位重复进入(创建单位手动添加的情况下)。Unit数组将单位按自定义值作为索引添加到单位组,这样就可以通过单位自定义值来获取对应单位。LocalIndex是个临时整数,用来记录当前单位的自定义值。触发如下:将初始化地图中的单位添加到Indexer系统中。这里利用数组的0号索引作为临时的变量,不作为实际存储使用。获取当前单位后(这里是单位组循环中的选取单位),将Flag的值+1,并作为单位的自定义值,即可保证每个单位的自定义值不同。该触发最后一行是给下一个触发添加事件。下一个触发里直接设置事件也可以。游戏中动态进入地图的单位添加到Indexer系统中。和上一个触发原理相同。手动添加单位进入的触发。需要先设置Index_Unit[0]为需要添加的单位,然后运行AddIndex触发器(无视条件)。原理同上。死亡的单位移出Indexer系统。无论死亡的单位是不是拥有最大的自定义值,Flag的值都需要-1.增强的Indexer系统4.1给Indexer系统添加更多更复杂的功能新建了如下触发。这里是给进入Indexer系统的单位注册受伤害事件,通过这种方式做到捕获任意单位受伤害。之后还需要改造一下前面的触发:手动添加单位的时候就不需要再运行触发了,一般这种情况都不需要动态做,如果需要,自己再加上运行触发即可。4.2学着自己添加一个新功能我想做一个检测单位移动速度变化的触发。如下所示。新建了一个变量我用New_Speed变量记录单位移动速度,然后每0.01秒与单位当前移动速度做比较。但是这么做还不够!还存在着不少bug!首先:给一个不确定大小或很大的数组设置数组大小是不明智的(大家都懂的!)。而变量如果不设置初始值,就会发生一个现象:访问到未赋值变量时,触发就会中断。到选中的这一行时就已经运行不下去了。同时整个循环也都无法继续。这时候上面创建的AddExFunction触发就开始发挥作用了。在这个触发添加这一行即可避免变量未赋值导致的函数中断。这样就结束了么?当然没有。在单位死亡移出Indexer系统时,单位的自定义值发生了变化,因此这里还需要加一行。这个方法虽然管用。但是也面临着一个缺陷,随着自己添加的功能逐渐增加,单位死亡时需要重新赋值的变量也会相应增加,导致ExitIndex触发越来越复杂。为了避免这个状况,这里引入了双Indexer。4.3双Indexer的原理及使用方式对上节出现的问题提出一个双Indexer的解决方案。方案原理为采用一个数组来记录单位对应的数组索引,而不是简单的采用单位自定义值,这里简称这个单位对应的数组索引为“索引”
您可能关注的文档
- 2016年慈善助学活动申请表.doc
- 2017危险废物管理培训.doc
- 2017年本科毕业生档案材料归档规范.doc
- 2017年湖北高考文科数学试题答案解析【最新Word版】.doc
- 2017年湖北高考理综试题及答案【Word版】.doc
- 2017年秋季学期毕业论文日程安排(本科)(学生提交材料一.doc
- 59范围变更控制是指对有关项目范围的变更实施控制。再.ppt
- 7.15采集需核酸检测全血贴签操作规程.doc
- 9.22济南市历下区公车拍卖标的详单.doc
- HACCP在脱水葱生产中的应用.doc
- 职业技术学院2024级工业机器人技术(安装与维护)专业人才培养方案.docx
- 职业技术学院2024级应用化工技术专业人才培养方案.pdf
- 职业技术学院2024级软件技术(前端开发)专业人才培养方案.pdf
- 职业技术学院2024软件技术专业人才培养方案.docx
- 职业技术学院2024级信息安全技术应用(安全运维)专业人才培养方案.docx
- 职业技术学院2024级新能源汽车检测与维修技术(车辆鉴定与评估)专业人才培养方案.pdf
- 职业技术学院2024级石油炼制技术专业人才培养方案.pdf
- 职业技术学院2024级环境监测技术专业人才培养方案.docx
- 职业技术学院2024级汽车制造与试验技术专业人才培养方案.pdf
- 职业技术学院2024级信息安全技术应用专业人才培养方案.pdf
文档评论(0)