Project1

标题: EXP 条 计算公式 [打印本页]

作者: cZooCz    时间: 2008-10-27 00:52
标题: EXP 条 计算公式
现在做个EXP条形图
因为从未接触过此类。。。公式犯了难,那位大侠出来指点一二。
举例 x=获得经验 y=经验总值 i = 条形长度
  条形显示计算公式 x*i/y
显示正常。actor.level>1 就不一样了,这就不用说了,肯定的。
这时x=x将加上角色上级总经验/总经验 --默认显示值
~~帮个忙,给个公式
作者: 亿万星辰    时间: 2008-10-27 01:50
由于经验是累加的,所以当前经验其实等于 当前总经验 - 前一级的经验

显示长度 = 经验条总长 * (当前总经验 - 前一级的经验) / 下一级需要的经验 [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: cZooCz    时间: 2008-10-27 01:57
前一级经验和下一级经验怎么获取···
exp_list[@level+1]?
作者: 友情变爱情    时间: 2008-10-27 03:54
这是我前几天自己弄的,你看看吧
  def exp #现在的总经验
    return @exp
  end
  def next_exp #升下一级要的总经验
    return @exp_list[@level+1]
  end
  def now_exp #升当前级要的总经验
    return @exp_list[@level]
  end
  def level #现在的等级
    return @level
  end
  def max_level #最大等级
    return $data_actors[@actor_id].final_level
  end
在Game_Actor里插入以上部分

绘制值条的部分是下面的内容
def EXP(actor, x, y, w=96)
  self.contents.fill_rect(x-2, y+6, w+4, 16, Color.new(255, 150, 150, 255))
  self.contents.fill_rect(x-1, y+7, w+2, 14, Color.new(90, 90, 255, 255))
  if actor.level == actor.max_level
  w6 = w+2
  else
  w6 = w * (actor.exp-actor.now_exp) / (actor.next_exp-actor.now_exp)
  end
  self.contents.fill_rect(x-1, y+7, w6, 14, Color.new(0, 255, 0, 255))
end
[LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: slick    时间: 2008-10-27 04:00
看这一段,是脚本中Game_Actor里的

  def make_exp_list
    actor = $data_actors[@actor_id]
    @exp_list[1] = 0

    pow_i = 2.4 + actor.exp_inflation / 100.0
    for i in 2..100
      if i > actor.final_level
        @exp_list = 0
      else
        n = actor.exp_basis * ((i + 3) ** pow_i) / (5 ** pow_i)
        @exp_list = @exp_list[i-1] + Integer(n)
      end
    end

  end

关键是这一句

n = actor.exp_basis * ((i + 3) ** pow_i) / (5 ** pow_i)

这个就是角色计算经验值等级的关键公式,其中
n 值的意义就是角色每一等级之间相差多少经验值,
i 值的意义就是角色目前等级。

而乘方数
pow_i = 2.4 + actor.exp_inflation / 100.0

的计算方法就是 2.4 + 角色经验值增长度 / 100

也就是说,

等级间相差的经验值 = 角色基本经验值 * ((目前等级 + 3) ^ 乘方数) / (5 ^ 乘方数)


角色基本经验值 和 角色经验值增长度 都可以在默认界面中设定。

完了,回晚了一步{/dk}
作者: cZooCz    时间: 2008-10-27 04:21
谢谢啦……{/gg}
作者: 亿万星辰    时间: 2008-10-27 04:32
我也来提供个方法好了
首先
  1. class Game_Actor
  2.   attr_reader   :exp_list
  3. end
复制代码


接下来在需要画经验条的window里
  1.     self.contents.fill_rect(320, 48, 160, 32, Color.new(0, 0, 0))
  2.     if @actor.exp_list[@actor.level + 1].to_i != 0
  3.       width = 160 * (@actor.exp.to_i - @actor.exp_list[@actor.level].to_i) / (@actor.exp_list[@actor.level + 1].to_i - @actor.exp_list[@actor.level].to_i)
  4.       self.contents.fill_rect(320, 48, width, 32, Color.new(255, 0, 0))
  5.     else
  6.       self.contents.fill_rect(320, 48, 160, 32, Color.new(255, 0, 0))
  7.     end
复制代码





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1