点的泄漏
点是最大的泄漏源.
某简略刷兵进攻触发如下:
事件
时间 - 每 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
选取单位(玩家等类同)作动作=把下面的动作循环(选取的单位个数)次,选取单位分别为第一、二、三个单位...依此类推
|