游戏里是设定为“HP<=0 即死亡”更合理,还是“HP<0 即死亡”更合理呢?
其实没区别。
首先你要明白:UI显示和数据处理机是没关系的。显示是0不代表真的是0。
显示0,实际有可能是-0.001,也有可能是0.001,也有可能真的是0。
你比如血量上限是整数,所有技能伤害显示都是整数,但实际上伤害数据后面都跟一个0.001——甚至这个0.001都是单独结算的:伤害技能命中就先扣这0.001。
这样即使伤害是1累计100次也只会有0.1的偏差值,四舍五入取整显示的时候和整数没区别。但是你永远打不到刚好0血。这种就可以直接判定<0而不用考虑=0
但是直接把=0也判定死亡。从结果来看是完全一样的。
这点在制作魔兽地图的时候就经常用。绝大多数DIY英雄的技能都是用通魔空技能来做的。
你比如你要制作一个飞锤技能(简单例子,我知道原版有没必要从头做,复杂的你看我文章区),实际上是你释放一个动画空技能,而实际释放飞锤的是一个隐形单位。这会导致仇恨系统捕获不到伤害来源。
这时候我个人的习惯就是在技能中加入一个“施法者对目标造成0.1伤害”,然后用触发器统一捕捉,当单位受到0.1伤害时手动指配仇恨目标。而显示伤害值和计分板则直接忽略小于1的伤害。
技能自身的伤害依然是整十整百的,计分也不影响,但是最终结算你永远也结算不到整0。而且由于这个0.1在魔兽里足够小,也不影响伤害计算。
但是你说有没有人用那种=0的方式而不用我这种痕量伤害结算法的?有的是好吧……
很多朋友也会提到“濒死状态”和“锁血技”,这个也是一样的。
濒死状态和锁血技可以设置成等0触发或者小0触发,过程都是触发后给角色打“濒死”标签,UI显0,然后走结算流程。
也就是说“濒死状态”这个状态是需要另外的独立变量来标识的,而不能直接靠血量决定。血量显示只是个虚值。
你如果之直接用“生命置零”来节省这一个变量的空间,就需要精确计算所有伤害值,避免刚好打出0血触发濒死技——但是你说这样行么?也不是不行。
所以从结果来看,使用小0还是等0更多的是个人习惯。
只要你能保证整个游戏内的结算逻辑相同且自洽,用哪个随便。
对,我的意思是:你不能这个角色用等0,另个角色用小0。更不能搞错了什么场景用等0什么场景用小0。
否则debug的时候有你头大的。