Project1

标题: 关于技能伤害计算的优化问题 [打印本页]

作者: a364774426    时间: 2013-1-30 13:06
标题: 关于技能伤害计算的优化问题
由于某些原因,我给技能增加了7个属性,并代入最终的伤害计算中去,如下
  1. spi_f = user.spi*2.0/(self.spi+self.def)
  2.    
  3.    fire_f = obj.read_note('火相')/100.0 if obj.read_note('火相') != nil
  4.    fire_f = 0 if obj.read_note('火相') == nil
  5.    
  6.    ice_f = obj.read_note('冰相')/100.0 if obj.read_note('冰相') != nil
  7.    ice_f = 0 if obj.read_note('冰相') == nil
  8.    
  9.    wind_f = obj.read_note('风相')/100.0 if obj.read_note('风相') != nil
  10.    wind_f = 0 if obj.read_note('风相') == nil
  11.    
  12.    thunder_f = obj.read_note('雷相')/100.0 if obj.read_note('雷相') != nil
  13.    thunder_f = 0 if obj.read_note('雷相') == nil
  14.    
  15.    earth_f = obj.read_note('地相')/100.0 if obj.read_note('地相') != nil
  16.    earth_f = 0 if obj.read_note('地相') == nil
  17.    
  18.    poison_f = obj.read_note('毒相')/100.0 if obj.read_note('毒相') != nil
  19.    poison_f = 0 if obj.read_note('毒相') == nil
  20.    
  21.    light_f = obj.read_note('光相')/100.0 if obj.read_note('光相') != nil
  22.    light_f = 0 if obj.read_note('光相') == nil
  23.    
  24.    dark_f = obj.read_note('暗相')/100.0 if obj.read_note('暗相') != nil
  25.    dark_f = 0 if obj.read_note('暗相') == nil
  26.    
  27.    fire_damage =(spi_f*(user.fire_def*2 - self.ice_def*2 - self.fire_def + self.wind_def)*fire_f).round
  28.    fire_damage = 0 if fire_damage < 0
  29.    
  30.    ice_damage =(spi_f*(user.ice_def*2 - self.earth_def*2 - self.ice_def + self.fire_def)*ice_f).round
  31.    ice_damage = 0 if ice_damage < 0
  32.    
  33.    wind_damage =(spi_f*(user.wind_def*2 - self.fire_def*2 - self.wind_def + self.thunder_def)*wind_f).round
  34.    wind_damage = 0 if wind_damage <0
  35.    
  36.    thunder_damage =(spi_f*(user.thunder_def*2 - self.wind_def*2 - self.thunder_def + self.earth_def)*thunder_f).round
  37.    thunder_damage = 0 if thunder_damage <0
  38.    
  39.    earth_damage =(spi_f*(user.earth_def*2 - self.thunder_def*2 - self.earth_def + self.ice_def)*earth_f).round
  40.    earth_damage = 0 if earth_damage <0
  41.    
  42.    poison_damage =(spi_f*(user.poison_def*2 - self.poison_def)*poison_f).round
  43.    poison_damage = 0 if poison_damage <0
  44.    
  45.    light_damage =(spi_f*(user.light_def*2 - self.light_def + self.dark_def)*light_f).round
  46.    light_damage = 0 if light_damage <0
  47.    
  48.    dark_damage =(spi_f*(user.dark_def*2 - self.dark_def - self.light_def)*dark_f).round
  49.    dark_damage = 0 if dark_damage < 0
  50.    
  51.    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