找回密码
 点一下
查看: 1558|回复: 15

能否避免使用“单位死亡”事件,而用其他事件来代替?

[复制链接]
发表于 2017-4-1 13:02:48 | 显示全部楼层 |阅读模式
RT,如果有几百个单位大量在短时间内死亡,则必然会导致触发器超极频繁的运作,导致卡机
能否比避免使用单位死亡事件,从另外的办法来获取一个单位死亡时的事件呢?
(暴雪的“指定单位死亡”都是假的,触发器还是会非常频繁的刷事件)
 楼主| 发表于 2017-4-1 14:45:00 | 显示全部楼层
现在难点在于,我给这个单位添加了“死亡时使用效果”的行为
然后虽然可以引用这个效果来减少运算量了,但是无法获取击杀者
回复

使用道具 举报

发表于 2017-4-1 15:10:00 | 显示全部楼层
不明白你的用意何在,而且行为的效率明显低于触发器。用死亡事件就算同时有上千个单位死掉只要一个if(单位类型、所有者、在单位组中、单位的费用等)都能保证不会触发,绝不会存在卡顿的现象。
而使用行为呢必须每个单位一个,是要占用内存的。而且死亡本身只是一个全局消息使用效果并不会明显的降低运算量。
回复

使用道具 举报

发表于 2017-4-2 01:55:44 | 显示全部楼层
你们两人的理论都是错的。

首先”指定单位死亡”明明是有用的,不会无限引发事件,你自己写错了事件而已吧。


另外,用效果做也可以。伤害响应效果的话就可以获得击杀者。击杀者就是伤害响应效果的目标。当然伤害响应不会响应无击杀者的死亡,所以这个要注意。



buff只需要放在那个单位身上,什么“”必须每个单位一个“”啊
回复

使用道具 举报

发表于 2017-4-2 09:28:36 | 显示全部楼层
在我最大处理器状态40%且窗口化开超多软件的情况下经过测试,差异并不大。但触发器死亡事件效率还是高于伤害事件 测试死亡.SC2Map (13.61 KB, 下载次数: 3)

点评

假如后台没开软件其他条件不变的话两种方法都几乎没有延迟  详情 回复 发表于 2017-4-2 09:31
回复

使用道具 举报

发表于 2017-4-2 09:31:31 | 显示全部楼层
priceles 发表于 2017-4-2 09:28
在我最大处理器状态40%且窗口化开超多软件的情况下经过测试,差异并不大。但触发器死亡事件效率还是高于伤 ...

假如后台没开软件其他条件不变的话两种方法都几乎没有延迟
回复

使用道具 举报

发表于 2017-4-2 12:22:11 | 显示全部楼层
你预设了前提然后得出一个永远比另一个效率高。但是这个世界上的地图类型多了。而且不同的做法的应用范围也不同。


首先死亡事件可以直接指定单位的。就算你是后创建的单位也可以。因为事件本来就是可以动态注册的。



想要获得更详细的信息比如击杀效果,击杀伤害值,那么可以直接使用伤害事件,用不着加buff和响应效果。单位受到伤害事件本来就可以只勾上“致命伤害”的。


伤害事件不是你在地图里用的那个“单位吸收伤害”,而是直接有一个单位受到伤害的事件可以用。这个事件同样是可以动态注册的。


当然,动态注册事件有一个隐含的缺点就是如果你地图上单位一片片地死,你又要重复地注册单位的话,就会产生很多的废事件,因为sc2里面大部分单位死了就不会复活,那些引发过的特定单位死亡事件永远都不会触发,只是单纯地被挂在那里了。虽然其实不会有什么效率问题,但是有洁癖的人可能会心烦。



然后,如果你想要获得不特定多数单位的受伤/死亡事件,但是它们又明显大大低于总单位数量,又需要获得或者更改伤害,那么伤害吸收buff就能登场了。你想要注册哪几个人就把buff给哪几个人。伤害吸收buff+单位吸收伤害事件是最万能的,因为它几乎可以获得一切信息,并且可以修改一切数值。如果你想要给几个特定的单位制作特定的自定义伤害/防御公式,那么这个是最好的解决方法。


尤其是很多时候,你就是想获得“有某个buff的单位受伤/死亡”这种事件,这种情况下buff可以直接用上伤害响应,完全没有占额外的buff名额。

点评

现在是这样的,我特地查看了下触发器,如果是“初始已存在于地图上的单位”,或者“单个变量已存在于地图上的单位”,那么无关单位死亡后,不会让这些触发器出现“事件”。 但如果我设置一个“单位数组变量”,那么  详情 回复 发表于 2017-4-9 08:28
回复

使用道具 举报

发表于 2017-4-3 19:39:47 | 显示全部楼层
可以使用指定单位事件,而且任意单位死亡的话,也看不出效率多么低下啊,毕竟你可以简单的用一两个条件就过滤到不需要的内容,而不必每个都执行一遍所有动作啊。
如果说瞬时死个几百单位就导致lag,恐怕是你的小霸王需要更新换代啦。另外死亡时的特效表现反而很考验机器性能呢。

点评

现在是这样的,我特地查看了下触发器,如果是“初始已存在于地图上的单位”,或者“单个变量已存在于地图上的单位”,那么无关单位死亡后,不会让这些触发器出现“事件”。 但如果我设置一个“单位数组变量”,那么  详情 回复 发表于 2017-4-9 08:29
回复

使用道具 举报

 楼主| 发表于 2017-4-9 08:28:55 | 显示全部楼层
麦德三世 发表于 2017-4-2 12:22
你预设了前提然后得出一个永远比另一个效率高。但是这个世界上的地图类型多了。而且不同的做法的应用范围也 ...

现在是这样的,我特地查看了下触发器,如果是“初始已存在于地图上的单位”,或者“单个变量已存在于地图上的单位”,那么无关单位死亡后,不会让这些触发器出现“事件”。
但如果我设置一个“单位数组变量”,那么如果单位占不满,那么他就会和“任意单位死亡”一样,一直出事件,一直出事件……
单位死亡事件频发.SC2Map (25.16 KB, 下载次数: 2)

点评

这事儿你只需要给每个元素赋个初值就行了。这游戏本来就是这样运作的。  详情 回复 发表于 2017-4-10 07:21
你不会在事件中直接使用数组元素了吧?那样就不对了,因为事件注册时是地图加载时,而数组的赋值却是运行中。所以对于运行中出现的单位,需要动态注册。你需要对自定义代码有稍微的了解再能搞定这件事。  详情 回复 发表于 2017-4-9 19:01
回复

使用道具 举报

 楼主| 发表于 2017-4-9 08:29:51 | 显示全部楼层
yxxiaobin 发表于 2017-4-3 19:39
可以使用指定单位事件,而且任意单位死亡的话,也看不出效率多么低下啊,毕竟你可以简单的用一两个条件就过 ...

现在是这样的,我特地查看了下触发器,如果是“初始已存在于地图上的单位”,或者“单个变量已存在于地图上的单位”,那么无关单位死亡后,不会让这些触发器出现“事件”。
但如果我设置一个“单位数组变量”,那么如果单位占不满,那么他就会和“任意单位死亡”一样,只要有任意单位死亡就一直出事件,一直出事件……

点评

这要看触发器里面是不是把无单位当成任意单位了,如果当成无单位就什么都不会发生,好像有个动作可以设置的  详情 回复 发表于 2017-4-9 11:22
回复

使用道具 举报

发表于 2017-4-9 11:22:08 | 显示全部楼层
杰拉鲁星人 发表于 2017-4-9 08:29
现在是这样的,我特地查看了下触发器,如果是“初始已存在于地图上的单位”,或者“单个变量已存在于地图 ...

这要看触发器里面是不是把无单位当成任意单位了,如果当成无单位就什么都不会发生,好像有个动作可以设置的
回复

使用道具 举报

发表于 2017-4-9 19:01:40 | 显示全部楼层
杰拉鲁星人 发表于 2017-4-9 08:28
现在是这样的,我特地查看了下触发器,如果是“初始已存在于地图上的单位”,或者“单个变量已存在于地图 ...

你不会在事件中直接使用数组元素了吧?那样就不对了,因为事件注册时是地图加载时,而数组的赋值却是运行中。所以对于运行中出现的单位,需要动态注册。你需要对自定义代码有稍微的了解再能搞定这件事。
回复

使用道具 举报

发表于 2017-4-10 07:21:08 | 显示全部楼层
杰拉鲁星人 发表于 2017-4-9 08:28
现在是这样的,我特地查看了下触发器,如果是“初始已存在于地图上的单位”,或者“单个变量已存在于地图 ...

这事儿你只需要给每个元素赋个初值就行了。这游戏本来就是这样运作的。
回复 1 0

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-5-5 02:33 , Processed in 0.314459 second(s), 30 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表