|
本帖最后由 东方油瓶 于 2016-12-20 03:46 编辑
以前写的太混乱,属于验证探索期。
现在逐渐接近已知的状态,分享一些结果。
---------------------------------------首先是关于行为层数的效率问题:
属性类型的行为叠加,与增益行的行为叠加,本质上不是一种东西,是两种完全不同的行为。
属性类型虽然也可以用行为叠加层数获取,但是却有几个特性:
1. 可以是负数,很酷炫。
2. 其部分属性也可以基础负数设定,比如+10%攻击速度,如果-1层时,会减少 10% 的攻击速度。
他与增益类效果的区别:
增益类的效果会创建实例,根据行为的层数,这个其实很好理解:
第1点:伤害响应来分析
如果你是10层,那么响应10次,如果是1000层,响应1000次。
第2点:持续时间来分析
如果不勾选"刷新叠加"标旗,行为的持续时间会独立计算,1000层在不同时间获得,计算的时间也是独立的。
从脚本的角度去分析,一个行为增益具有这种功能,肯定是要创建不同的线程才能够完成的。
至少,至少也要有专门的独立线程来处理 获得与失去时,不同层数的时间问题,或者叠加的响应次数问题。
因此增益类的行为叠加数量,是会明显影响效率的。
这个层数大概在上了 5000+ 左右开始体现,但是实际游戏中并不能支持 5000+之前不卡顿。
因为测试时,这5000+的叠加仅仅在行为只是一个空壳并且只有叠加次数时,添加下一个会出现明显卡顿的情况。
那么在有实际效果时,这一阈值肯定也会受到影响,也就是更小的时候就会被影响。
i7处理器+960显卡,这种电脑算得上是中等偏上了,因此不会是设备的问题。
但是测试属性类型的效果时。
10个属性,我给他每个 1亿 的叠加层数,没有丝毫波动,陆战队员甚至有点想笑。
我再给了100亿,还是没有丝毫波动。
同时属性是没有响应伤害的功能的,也就是可以理解,属性真的就是字面意思,仅仅是改变一个单位的属性,并不考虑持续时间这样需要独立线程完成的东西。
因此属性无论多少层都没有影响。
原来产生了真正影响的并不是属性,而是用于属性叠加的增益,因为属性的层数是没有办法通过触发器修改的。
因此要避免,用100个增益层数,每个增益+1属性去完成属性的修改,而是1个增益+100属性。
功能方面的问题需要自己用脚本去解决,比如数据模板,或者2进制属性、10进制属性等。
这也就是属性局限性的地方,希望暴雪能够添加新的函数吧,然而希望很渺茫。
一个趣味性的bug表示,暴雪是完全可以增加一个这样的函数的:
物品BUG,当物品的行为带来超过属性行为上限的增益时,失去这一物品,将会改变单位的属性为非正常状态。
---------------------------------------另外最近发现一个行为的新玩法:
关于UI编辑器创建的支持显示层数以及持续时间冷却状态的 behaviorPanel。会响应如下机制:
1.如果行为标旗去掉倒计时,那么冷却转的方向也会逆方向转动,很搞笑。
2.行为叠加的层数,不仅仅可以显示BUG叠加层数,如果勾选了行为伤害响应中的 费用-充能计数。
那么充能计数也会覆盖掉行为的当前叠加层数,显示为该行为当前的计数。
很TM实用,我很多用于计算类的,叠加类的效果都这样弄了。
如果用于这一功能,需要去掉“疲劳伤害响应”,否则行为将会在0 充能计数时消失。
反过来,这也可以用于一些自动消失的计数类效果,真的很实用。
---------------------------------------最后关于爱恨情仇的数据模板:
这个东西真的,只能靠猜了。
猜测是,多个玩家不同数据的同一个字段,如果不同步默认的玩家越多,那么在使用这一效果时,就会占用越多的效率?
想一下,比如哈。
在星际2的脚本中,玩家数量16.那么每个字段都是 amount[17] 这个尺寸的变量。实数或者字符串或者整数。
当检测到已被修改的字段时,将使用amount[player]的值,否则使用amount[0]
如果是这样的话,就很好理解了。
基于这个,我现在的使用方式:改变-制造-修改为默认。
这样玩家的数据除了使用一瞬间全都是同步的。
当然这完全是自己的猜测,没有任何的根据,也没有任何的分析,仅仅凭的感觉,参考性并不好。
另外,数据模板的一些效果,是可以实时改变的。
比如,行为的修改限制,配合自定义的生命护盾条,可以显示为护盾。
此时,真实的修改限制是实时的,也就是在创建的那一瞬间,施法者的数据模板数值。
之后的没有影响,因为修改限制是,某个单位的 某个行为的 独立修改剩余值。
因此可以实时改变修改实际效果,伤害量也是同理,不会出现已经创建的被之后修改影响的情况。
属性类的效果就受到之后修改的影响。
具体的玩家为,施法者玩家。
这也是无论行为、效果,在触发器中的函数,都有目标玩家、施法者玩家,或目标单位、施法者单位的原因。
行为的数据模板,取决于行为的施法者,行为的施法者,取决于脚本创建时的制定者,或者,创建行为效果的施法者。
很容易去理解。
基于这个,大部分支持多玩家多单位的效果,实际上还是TM要用WAR3的那一套,要么自己写一个新系统,要么做2进制属性这种蹩脚的东西同步原来的系统。
暴雪始终没有开发所有接口,而这些不开放的部分,导致了开放的部分实际上也显得很蹩脚了。
但是,只支持多玩家的效果,是可以通过数据模板来完成的了,这也是进步比较大的一个地方。
默默庆幸一下,幸亏我做的是单英雄图,不用考虑这些幺蛾子,养成类RPG或者多人对战RPG或者TD同志们,我在这里致以最崇高的敬意与深深的同情。
---------------------------------------额,最后的最后,关于数据模板与行为的联动:
1.假如,一个增益可以修改某个属性的 点数,那么通过数据模板来修改这一个点数时。
触发器依然会响应单位属性改变巴拉巴拉巴之类的效果,也就是说实际上是一次所有数据的修改。
不用考虑相关的同步问题,这一点还是点赞的,做的不错爸爸。
2.关于触发器的行为类数据捕获
(1. 单位有行为
在虚空之遗后,暴雪爸爸非常鸡贼,非常猥琐的,更换了一个函数 :UnitHasBehavior2
而原来没有2,那个原来的UnitHasBehavior仍然保持在native之中,但是GUI写的已经被替换了。
这两个函数的区别是:原来的,加入单位的行为被禁用了,依然返回true
2版本,如果被禁用,那么返回false
单位的行为存在有、没有;有但被禁用、有而且启用这种不同的状况。
(2. 单位行为叠加层数。
如果行为被禁用,触发器依然获得正常的叠加数,但,数据编辑器验证器中获得的是0
(3. 单位行为X 与 单位身上的行为数量
超极坑爹的一个玩意儿。
首先,获取的数量,存在跟数组一样的问题,实际上是17个他会返回16。
最最最坑的来了:
获取单位的行为X
这个居然是从 1 开始的,我TM也是醉了。
你获取数量从 0开始,获取指定的从1开始,用起来不死人见了鬼简直是。
目前这两个函数我已经封装了自己的,实际上大部分函数我都自己封装了。
大概过程就是:用的时候感觉这个不顺手啊,封装一下下。那个不顺手啊,封装一下下。
回头一看,娘的全是自己封装过的了。
3. 关于属性的一些不要碰的地方
前面说过,负数属性跟正数一样可以作用某些单位属性。但是活力类的最好别碰,无论是恢复速度还是最大值。
负数会直接爆炸,单位的血量会不停的跳或者死掉,很尴尬。
啊啊啊啊啊啊啊啊啊就这么多吧,作图去了。
总之,星际2,需要一些好图......否则,这次是认真的:离死不远了。
|
|