点的泄漏 点是最大的泄漏源. 某简略刷兵进攻触发如下: 事件 时间 - 每 2.00 秒触发事件 条件 动作 单位 - 创建 1 个 步兵 给 玩家12(棕色) 在 (shuabingqu <预设> 的中心点) ,面向角度为 默认建筑朝向 度 单位 - 对 (最后创建的单位 [R]) 发布 攻击移动 命令到目标点: (城堡 0000 <预设> 的位置) 事件 时间 - 每 5.00 秒触发事件 条件 动作 单位 - 创建 1 个 牧师 给 玩家12(棕色) 在 (shuabingqu <预设> 的中心点) ,面向角度为 默认建筑朝向 度 单位 - 对 (最后创建的单位 [R]) 发布 攻击移动 命令到目标点: (城堡 0000 <预设> 的位置) 单位 - 创建 1 个 矮人火枪手 给 玩家12(棕色) 在 (shuabingqu <预设> 的中心点) ,面向角度为 默认建筑朝向 度 单位 - 对 (最后创建的单位 [R]) 发布 攻击移动 命令到目标点: (城堡 0000 <预设> 的位置) 事件 时间 - 每 5.00 秒触发事件 条件 动作 单位组 - 选取 (属于 玩家12(棕色) 的所有单位) 内所有单位做动作 Loop - 动作 单位 - 对 (选取单位) 发布 攻击移动 命令到目标点: (城堡 0000 <预设> 的位置) //本触发是为防止怪物进攻途中受干扰而呆立或往回跑故每5秒重复命令。 计算一下点的个数: 单位 - 创建 1 个 xx 给 玩家12(棕色) 在 (shuabingqu <预设> 的中心点) ,面向角度为 默认建筑朝向 度 这里创建了一个点在(shuabingqu <预设> 的中心点) 单位 - 对 (最后创建的单位 [R]) 发布 攻击移动 命令到目标点: (城堡 0000 <预设> 的位置) 创建了一个点在 (城堡 0000 <预设> 的位置) 单位组 - 选取 (属于 玩家12(棕色) 的所有单位) 内所有单位做动作 Loop - 动作 单位 - 对 (选取单位) 发布 攻击移动 命令到目标点: (城堡 0000 <预设> 的位置) 这个很可怕,每一次都会泄漏相当于玩家12所有单位数量的点~ 照上面刷兵,如果玩家12的单位始终在15个,一个小时差不多就要泄漏1800+2880+10800=15280个点 由此可见排点的重要。 ps:在创建单位动作中点泄漏和单位个数无关,创建1个步兵在xx和创建5个步兵在xx都是泄一个点 基本排点方法 排泄的方法是,设置点变量=要用的点,动作中引用变量,用完了再把变量记录的点删除: 事件 单位 - 单位进入 tiaozhanqishi <预设> 条件 ((触发单位) 是 英雄) 等于 TRUE 动作 设置 dian1 = (tiaozhanqishi <预设> 的中心点) 单位 - 创建 1 个 骑士 给 中立敌对 在 dian1 ,面向角度为 默认建筑朝向 度 物品 - 创建 经验之书 在 dian1 单位 - 对 (触发单位) 发布 攻击移动 命令到目标点: dian1 //等等一堆动作 点 - 清除 dian1 //这就是清除刚创建的点啦 这个的道理也很简单,既然在动作中创建出来的点不能被删除,那么就事先把要用的点创建出来存在变量里,用完以后就还可以用变量找到这个点再删除之。 一个移动到练功房触发的例子: 错误触发1: 事件 单位 - 任意单位 获得物品 条件 ((被操作物品) 的类型) 等于 进入练功房 动作 单位 - 立即移动 (触发单位) 到 (liangongfang <预设> 的中心点) 这是完全不管泄漏的写法 错误触发2: 变量:dian1:点变量 事件 单位 - 任意单位 获得物品 条件 ((被操作物品) 的类型) 等于 进入练功房 动作 设置 dian1 = (liangongfang <预设> 的中心点) 单位 - 立即移动 (触发单位) 到 (liangongfang <预设> 的中心点) 点 - 清除 dian1 动作中没有引用变量,还是创建了点,这里的变量完全无用 错误触发3: 事件 单位 - 任意单位 获得物品 条件 ((被操作物品) 的类型) 等于 进入练功房 动作 单位 - 立即移动 (触发单位) 到 (liangongfang <预设> 的中心点) 点 - 清除 (liangongfang <预设> 的中心点) 这是个一度引为流行的错误。。。 我们可以这么理解: 点 - 创建一个点在(liangongfang <预设> 的中心点) 单位 - 立即移动 (触发单位) 到 (最后创建的点) 点 - 创建一个点在(liangongfang <预设> 的中心点) 点 - 清除 (最后创建的点) 创建点后立刻清除,点 - 清除 (liangongfang <预设> 的中心点) 完全是一条废动作。一开始创建的点与后面的点只是都在(liangongfang <预设> 的中心点)的重叠点,却是两个分别的点,不能混为一谈。 正确触发: 变量:dian1:点变量 事件 单位 - 任意单位 获得物品 条件 ((被操作物品) 的类型) 等于 进入练功房 动作 设置 dian1 = (liangongfang <预设> 的中心点) 单位 - 立即移动 (触发单位) 到 dian1 点 - 清除 dian1 创建的点通过变量引用,而后删除,正确 上面第一个刷兵触发,将它简单处理下。。。 变量:dian1:点变量 dian2:点变量 事件 时间 - 每 2.00 秒触发事件 条件 动作 设置 dian1 = (shuabingqu <预设> 的中心点) 设置 dian2 = (城堡 0000 <预设> 的位置) 单位 - 创建 1 个 步兵 给 玩家12(棕色) 在 dian1 ,面向角度为 默认建筑朝向 度 单位 - 对 最后创建的单位 [R] 发布 攻击移动 命令到目标点: dian2 点 - 清除 dian1 点 - 清除 dian2 用变量记录创建点,刷兵动作使用刚才记录的点变量,完毕后再用变量把创建的点删除,全程没有东西创建出来占内存,就达到了排泄的效果。 简化一点可以成为下面触发: 变量:dian1:点变量 事件 时间 - 每 2.00 秒触发事件 条件 动作 设置 dian1 = (shuabingqu <预设> 的中心点) 单位 - 创建 1 个 步兵 给 玩家12(棕色) 在 dian1 ,面向角度为 默认建筑朝向 度 点 - 清除 dian1 设置 dian1 = (城堡 0000 <预设> 的位置) 单位 - 对 最后创建的单位 [R] 发布 攻击移动 命令到目标点: dian1 点 - 清除 dian1 前后都只是一个变量,在操作上较为简洁。要记住的是每次设置变量后都要像上面的触发删除一次,而不能: 变量:dian1:点变量 事件 时间 - 每 2.00 秒触发事件 条件 动作 设置 dian1 = (shuabingqu <预设> 的中心点) 单位 - 创建 1 个 步兵 给 玩家12(棕色) 在 dian1 ,面向角度为 默认建筑朝向 度 设置 dian1 = (城堡 0000 <预设> 的位置) 单位 - 对 最后创建的单位 [R] 发布 攻击移动 命令到目标点: dian1 点 - 清除 dian1 这样删除的只是最后创建的在(城堡 0000 <预设> 的位置)的点。 重复使用常用点 像以上的触发均用到(城堡 0000 <预设> 的位置)和(shuabingqu <预设> 的中心点)2个点,我们可以预先把可以多次利用的点用变量记录下来,然后直接套用以减少排泄的反复操作。 那么,上面的刷兵可以这样写: 变量:gudingdian:点变量数组 (gudingdian=固定点- -) 事件 地图初始化 条件 动作 设置 gudingdian[0] = (shuabingqu <预设> 的中心点) 设置 gudingdian[1] = (城堡 0000 <预设> 的位置) 。。。。。。 事件 时间 - 每 2.00 秒触发事件 条件 动作 单位 - 创建 1 个 步兵 给 玩家12(棕色) 在 gudingdian[0] ,面向角度为 默认建筑朝向 度 单位 - 对 最后创建的单位 [R] 发布 攻击移动 命令到目标点: gudingdian[1] 事件 时间 - 每 5.00 秒触发事件 条件 动作 单位 - 创建 1 个 牧师 给 玩家12(棕色) 在 gudingdian[0] ,面向角度为 默认建筑朝向 度 单位 - 对 最后创建的单位 [R] 发布 攻击移动 命令到目标点: gudingdian[1] 单位 - 创建 1 个 矮人火枪手 给 玩家12(棕色) 在 gudingdian[0] ,面向角度为 默认建筑朝向 度 单位 - 对 最后创建的单位 [R] 发布 攻击移动 命令到目标点: gudingdian[1] 事件 时间 - 每 5.00 秒触发事件 条件 动作 单位组 - 选取 (属于 玩家12(棕色) 的所有单位) 内所有单位做动作 Loop - 动作 单位 - 对 (选取单位) 发布 攻击移动 命令到目标点: gudingdian[1] 恩~这才是正常的写法啊。直接读取变量点是不会新创建点的,避免了反复新建-删除的麻烦。 gudingdian[0]和gudingdian[1]在游戏中就不要再另作赋值了。 相关情况 单独不确定的点还是必需使用变量新建-删除法的。 如怪物掉宝: 设置掉宝的基本方法是这样: 事件 单位 - 任意单位 死亡 条件 ((触发单位) 的所有者) 等于 中立敌对 (随机整数,最小值: 1 最大值: 100) 小于或等于 20 动作 物品 - 创建 经验之书 在 ((触发单位) 的位置) 每掉一个物品就会泄漏一个点。 参照最初的方法,我们得到排泄版: 变量:dian1:点变量 事件 单位 - 任意单位 死亡 条件 ((触发单位) 的所有者) 等于 中立敌对 (随机整数,最小值: 1 最大值: 100) 小于或等于 20 动作 设置 dian1 = ((触发单位) 的位置) 物品 - 创建 经验之书 在 dian1 点 - 清除 dian1 和开始一样,这里也是用变量记录点而后清除。这种变量的操作在一瞬间完成,不会持续影响变量的值,所以你可以除初始记录的点外都共用一、二个变量进行排泄。 ps:掉宝一般也可以使用:创建物品给英雄(死掉的敌人单位)动作,这当然也可以给单位,但由于敌人是死亡的,不管单位或英雄都无法得到物品,物品自然会掉在地上。 随机点也是一样操作~ 变量:dian1:点变量 事件 时间 - 每 5.00 秒触发事件 条件 动作 设置 dian1 = ((可用地图区域) 内的随机点) 单位 - 创建 1 个 步兵 给 玩家1(红色) 在 dian1 ,面向角度为 默认建筑朝向 度 点 - 清除 dian1 而如果是极坐标位移点会比较麻烦~ 事件 单位 - 任意单位 发动技能效果 条件 (施放技能) 等于 腐臭蜂群 动作 单位 - 立即移动 (触发单位) 到 (从 ((触发单位) 的位置) 开始,距离 256.00 ,方向为 ((触发单位) 的面向角度) 度的位移处) 这个触发应该怎么修改呢? 错误触发1: dian1:点变量 事件 单位 - 任意单位 发动技能效果 条件 (施放技能) 等于 腐臭蜂群 动作 设置 dian1 = ((触发单位) 的位置) 单位 - 立即移动 (触发单位) 到 (从 dian1 开始,距离 256.00 ,方向为 ((触发单位) 的面向角度) 度的位移处) 点 - 清除 dian1 错误触发2: dian1:点变量 事件 单位 - 任意单位 发动技能效果 条件 (施放技能) 等于 腐臭蜂群 动作 设置 dian1 = (从 ((触发单位) 的位置) 开始,距离 256.00 ,方向为 ((触发单位) 的面向角度) 度的位移处) 单位 - 立即移动 (触发单位) 到 dian1 点 - 清除 dian1 以上两种方法都有一点忽漏。。。 (从 ((触发单位) 的位置) 开始,距离 256.00 ,方向为 ((触发单位) 的面向角度) 度的位移处) 这条动作实际创建了2个点: ((触发单位) 的位置) 创建了点 (从 ((触发单位) 的位置) 开始,距离 256.00 ,方向为 ((触发单位) 的面向角度) 度的位移处)在此之上又创建了一个点 看得出,两种方法都有一个点没有清除。 正确写法是: dian1:点变量 dian2:点变量 事件 单位 - 任意单位 发动技能效果 条件 (施放技能) 等于 腐臭蜂群 动作 设置 dian1 = ((触发单位) 的位置) 设置 dian2 = (从 dian1 开始,距离 256.00 ,方向为 ((触发单位) 的面向角度) 度的位移处) 单位 - 立即移动 (触发单位) 到 dian2 点 - 清除 dian1 点 - 清除 dian2 呵呵这里两个变量不能省。 照之前的方法,试着修改下面的冲锋技能: 事件 单位 - 任意单位 发动技能效果 条件 (施放技能) 等于 冲锋 动作 For循环整数A从 1 到 30, 做动作 Loop - 动作 单位 - 立即移动 (触发单位) 到 (从 ((触发单位) 的位置) 开始,距离 20.00 ,方向为 ((触发单位) 的面向角度) 度的位移处) 等待 0.10 秒 效果是,使用后用3秒时间向前冲600范围。 这个临时凑的技能很烂~表bs。。。不理效率冲突误差什么,单从排点看: dian1:点变量 dian2:点变量 事件 单位 - 任意单位 发动技能效果 条件 (施放技能) 等于 腐臭蜂群 动作 For循环整数A从 1 到 30, 做动作 Loop - 动作 设置 dian1 = ((触发单位) 的位置) 设置 dian2 = (从 dian1 开始,距离 256.00 ,方向为 ((触发单位) 的面向角度) 度的位移处) 单位 - 立即移动 (触发单位) 到 dian2 等待 0.10 秒 点 - 清除 dian1 点 - 清除 dian2 是不可以的,循环作动作是将一段相若动作反复运行,循环整数A1-30重复了30次,每次创建了2个点,即共创建了60个点,而这里仅清除了最后2个点。清除点的动作应在每次设置后立刻清除,所以应该: dian1:点变量 dian2:点变量 事件 单位 - 任意单位 发动技能效果 条件 (施放技能) 等于 腐臭蜂群 动作 For循环整数A从 1 到 30, 做动作 Loop - 动作 设置 dian1 = ((触发单位) 的位置) 设置 dian2 = (从 dian1 开始,距离 256.00 ,方向为 ((触发单位) 的面向角度) 度的位移处) 单位 - 立即移动 (触发单位) 到 dian2 点 - 清除 dian1 点 - 清除 dian2 //要在等待前清的呦。。。 等待 0.10 秒 当然,对于循环中没有设置点动作的触发自然不要在循环内清除。 ps:循环整数A(B及其它自定义整数也一样)从a到b作动作=把下面的动作循环(b-a+1)次,第一次循环时循环整数A为a,第二次为a+1...依此类推,最后一次为b 选取单位(玩家等类同)作动作=把下面的动作循环(选取的单位个数)次,选取单位分别为第一、二、三个单位...依此类推 |