Project1
标题:
关于技能伤害计算的优化问题
[打印本页]
作者:
a364774426
时间:
2013-1-30 13:06
标题:
关于技能伤害计算的优化问题
由于某些原因,我给技能增加了7个属性,并代入最终的伤害计算中去,如下
spi_f = user.spi*2.0/(self.spi+self.def)
fire_f = obj.read_note('火相')/100.0 if obj.read_note('火相') != nil
fire_f = 0 if obj.read_note('火相') == nil
ice_f = obj.read_note('冰相')/100.0 if obj.read_note('冰相') != nil
ice_f = 0 if obj.read_note('冰相') == nil
wind_f = obj.read_note('风相')/100.0 if obj.read_note('风相') != nil
wind_f = 0 if obj.read_note('风相') == nil
thunder_f = obj.read_note('雷相')/100.0 if obj.read_note('雷相') != nil
thunder_f = 0 if obj.read_note('雷相') == nil
earth_f = obj.read_note('地相')/100.0 if obj.read_note('地相') != nil
earth_f = 0 if obj.read_note('地相') == nil
poison_f = obj.read_note('毒相')/100.0 if obj.read_note('毒相') != nil
poison_f = 0 if obj.read_note('毒相') == nil
light_f = obj.read_note('光相')/100.0 if obj.read_note('光相') != nil
light_f = 0 if obj.read_note('光相') == nil
dark_f = obj.read_note('暗相')/100.0 if obj.read_note('暗相') != nil
dark_f = 0 if obj.read_note('暗相') == nil
fire_damage =(spi_f*(user.fire_def*2 - self.ice_def*2 - self.fire_def + self.wind_def)*fire_f).round
fire_damage = 0 if fire_damage < 0
ice_damage =(spi_f*(user.ice_def*2 - self.earth_def*2 - self.ice_def + self.fire_def)*ice_f).round
ice_damage = 0 if ice_damage < 0
wind_damage =(spi_f*(user.wind_def*2 - self.fire_def*2 - self.wind_def + self.thunder_def)*wind_f).round
wind_damage = 0 if wind_damage <0
thunder_damage =(spi_f*(user.thunder_def*2 - self.wind_def*2 - self.thunder_def + self.earth_def)*thunder_f).round
thunder_damage = 0 if thunder_damage <0
earth_damage =(spi_f*(user.earth_def*2 - self.thunder_def*2 - self.earth_def + self.ice_def)*earth_f).round
earth_damage = 0 if earth_damage <0
poison_damage =(spi_f*(user.poison_def*2 - self.poison_def)*poison_f).round
poison_damage = 0 if poison_damage <0
light_damage =(spi_f*(user.light_def*2 - self.light_def + self.dark_def)*light_f).round
light_damage = 0 if light_damage <0
dark_damage =(spi_f*(user.dark_def*2 - self.dark_def - self.light_def)*dark_f).round
dark_damage = 0 if dark_damage < 0
damage = fire_damage+ice_damage+wind_damage+thunder_damage+earth_damage+poison_damage+light_damage+dark_damage
复制代码
然后就出现了一个情况,在使用群攻的时候就会出现卡帧的现象,如果是一段伤害还好,如果是多段就很让人蛋疼了。
于是,有无什么好的解决办法吗?
作者:
怪蜀黍
时间:
2013-1-30 13:21
只是卡帧,没有出错。难道是脚本执行的东西过多吗?你把类似obj.read_note('火相')这样的弄到一个数组里面,免得此次判断if都要执行read_note。
比如array = [obj.read_note('火相') ,obj.read_note('冰相'),……]
fire_damage =(spi_f*(user.fire_def*2 - self.ice_def*2 - self.fire_def + self.wind_def)*
(array[0].nil? ? 0 : array[0])
).round
ice_damage =(spi_f*(user.ice_def*2 - self.earth_def*2 - self.ice_def + self.fire_def)*
(array[1].nil? ? 0 : array[1])
).round
……
以减少函数的运行次数试试。
作者:
a364774426
时间:
2013-1-30 17:26
@delv25
请结贴,问题已解决~
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1