Project1

标题: 请问actor类中经验的1个问题 [打印本页]

作者: kvkv97    时间: 2023-12-14 21:28
标题: 请问actor类中经验的1个问题
本帖最后由 kvkv97 于 2023-12-21 21:31 编辑

在actor类中
  #--------------------------------------------------------------------------
  # ● 更改等级
  #     level : 新的等级
  #--------------------------------------------------------------------------
  def level=(level)
    # 检查上下限
    level = [[level, $data_actors[@actor_id].final_level].min, 1].max
    # 更改 EXP
    self.exp = @exp_list[level]
  end
在地图上建一个事件,设定加等级10,然后注释掉 self.exp = @exp_list[level],然后
在解释器中的command_316
  #--------------------------------------------------------------------------
  # ● 增减等级
  #--------------------------------------------------------------------------
  def command_316
    # 获取操作值
    value = operate_value(@parameters[1], @parameters[2], @parameters[3])
    # 处理重复
    iterate_actor(@parameters[0]) do |actor|
      # 更改角色的等级
      actor.level += value
p  actor.level
    end
    # 继续
    return true
  end
p  actor.level为什么值是1而不是11(注释掉self.exp = @exp_list[level])?
作者: srwjrevenger    时间: 2023-12-30 11:40
等级变化跟self.exp有关啊,
你把它注释掉会有什么后果?
看看升级和self.exp相关的地方吧。

解决问题不要老是盯着一个地方,
多看看,多找找相关脚本的具体内容和调用的地方。
作者: 939034448    时间: 2023-12-30 14:37
是这样,actor类的level方法每次调用会通过exp列表来更新等级,虽然你设定了等级加10,但是由于你这个self.exp=@exp_list[level]注释掉了,导致你的经验没有更新,它的过程大概是这样,当你使用actor.level这个方法,其内部会先验证一下经验在经验列表中的位置,然后返回level的值,你也许将level理解成actor的属性了,实际上是actor的方法,你之所以可以通过actor.level来获得等级是因为这个方法定义的时候给了返回值,这个返回值就是通过计算exp在exp列表里的位置后得出的等级,你注释了更新经验的操作所以你再用actor.level方法返回的等级只会是你当前经验值对应的等级




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