本帖最后由 KarsonCN 于 2022-5-2 12:07 编辑
复制代码在运行一个血条代码的时候出血了一点问题
- def__init__(self):
- self.hp = 玩家当前生命值
- self.max_hp = 玩家最大生命值
- self.hpAni = self.hp/self.max_hp
- def HP_Bar(self):
- if 玩家当前生命值 != self.hp or 玩家最大生命值 != self.max_hp:
- self.hp = 玩家当前生命值
- self.max_hp = 玩家最大生命值
- self.hpPercent = float(self.hp) / float(self.max_hp) # 当前血量百分比
-
- if self.hpAni > self.hpPercent:
- self.hpAni -= 0.01
- self.GetBaseUIControl(self.hp_bar).asProgressBar().SetValue(self.hpAni)
-
- elif self.hpAni < self.hpPercent:
- self.hpAni += 0.01
这是一个一秒执行30次的函数,一直就是动态刷新血条
可是不知道为什么后面两个if,elif会不断跳入
造成血条+0.01 -0.01
当我把elif改成if就正常了
请问有知道为什么的吗
本帖最后由 cnYeqi 于 2022-5-2 13:05 编辑
你的目的应该是体现出当前血量百分比如果大于或小于百之前的血量百分比就有一个逐渐改变直到记录百分比和真实百分比相等过程,但是血量的精度是多少呢?如果是当前为0.5256记录血量为0.5257,那么执行一次-0.01后记录血量变为0.5157,又不一样了,再次+0.01又变为0.5257,就会一直跳来跳去,有elseif 每次执行只会执行其中之一,你把else去了,就是在每次运行+0.1 -0.1互相抵消,看起来是不跳来跳去了,但是我觉得这也算不上正常吧...
解决方法就是只取前两位小数呗
个人理解,可能有问题....
你的目的应该是体现出当前血量百分比如果大于或小于百之前的血量百分比就有一个逐渐改变直到记录百分比和真实百分比相等过程,但是血量的精度是多少呢?如果是当前为0.5256记录血量为0.5257,那么执行一次-0.01后记录血量变为0.5157,又不一样了,再次+0.01又变为0.5257,就会一直跳来跳去,有elseif 每次执行只会执行其中之一,你把else去了,就是在每次运行+0.1 -0.1互相抵消,看起来是不跳来跳去了,但是我觉得这也算不上正常吧...
解决方法就是只取前两位小数呗
个人理解,可能有问题....