设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3246|回复: 2
打印 上一主题 下一主题

[已经解决] 关于技能伤害计算的优化问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
48
在线时间
2459 小时
注册时间
2011-12-18
帖子
1484
跳转到指定楼层
1
 楼主| 发表于 2013-1-30 13:06:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
由于某些原因,我给技能增加了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
复制代码
然后就出现了一个情况,在使用群攻的时候就会出现卡帧的现象,如果是一段伤害还好,如果是多段就很让人蛋疼了。
于是,有无什么好的解决办法吗?

点评

看来read_note就是祸根了,你把所有的read_note都去掉,直接把fire_f等换成一个定值,比如1.5,看看还卡不卡?如果不卡了,就尽量避免read_note的函数运行  发表于 2013-1-30 14:42
看看能不能换一种计算方法吧,其实计算原理很简单,就是乘一个系数,能不能没有系数的就彻底不计算它。  发表于 2013-1-30 14:29
若去除这51行脚本是不是卡帧就能消除?如果能,再依次添加几行脚本,直到卡帧出现,就能断定是哪行脚本导致卡帧了!  发表于 2013-1-30 13:57
那我也不知道啦,你随便p 123看看,执行脚本时弹出了多少个123?弹出相隔时间久不久,再找原因。如果相隔有明显间隔,就是每次执行都很纠结。  发表于 2013-1-30 13:44
这是一个深不见底的坑,这是一个广袤无边的坑,我才刚刚放上了一抔泥土……

《六道·陈国篇》开坑了……↓点我

Lv3.寻梦者 (版主)

八宝粥的基叔

梦石
0
星屑
4694
在线时间
5240 小时
注册时间
2009-4-29
帖子
14318

贵宾

2
发表于 2013-1-30 13:21:54 | 只看该作者
只是卡帧,没有出错。难道是脚本执行的东西过多吗?你把类似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
……
以减少函数的运行次数试试。

点评

不过,如果能不能将fire_damage这些也存入数组来计算呢?  发表于 2013-1-30 14:40
就算最后不将fire_damage这类东西代入伤害计算,只在判断是否具有fire_damage..dark_damage的情况下,卡帧依旧会出现。  发表于 2013-1-30 14:39
不能,只是减缓了卡帧现象,不过应该还是执行的东西过多,如果是剩下fire_damage和ice_damage的话,几乎没有卡帧,不过3个以上就十分明显了。  发表于 2013-1-30 14:07
以5次弹窗为一组的话,也就是五个敌人,间隔不长。实际情况是敌人的数量越多,群攻技能的卡帧现象越严重,有3个以上的敌人的时候卡帧就很明显了  发表于 2013-1-30 13:53
P叔,不行呢。  发表于 2013-1-30 13:41

评分

参与人数 1星屑 +100 收起 理由
咕噜 + 100 精品文章

查看全部评分

《逝去的回忆3:四叶草之梦》真情发布,欢迎点击图片下载试玩喵。

《逝去的回忆3》的讨论群:
一群:192885514
二群:200460747
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
48
在线时间
2459 小时
注册时间
2011-12-18
帖子
1484
3
 楼主| 发表于 2013-1-30 17:26:41 | 只看该作者
@delv25
请结贴,问题已解决~

点评

看得我晕了  发表于 2013-1-30 17:28
这是一个深不见底的坑,这是一个广袤无边的坑,我才刚刚放上了一抔泥土……

《六道·陈国篇》开坑了……↓点我
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-22 22:03

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表