Project1

标题: make_damage_value(user, item)方法 [打印本页]

作者: graygod    时间: 2013-12-21 04:58
标题: make_damage_value(user, item)方法
在 Game_Battler 的make_damage_value方法

裡有一句
value = item.damage.eval(user, self, $game_variables)  

查了一下  
為 RPG::UsableItem::Damage  類 內建的方法

但 說明為 :
eval(a, b, v)
根据参数执行计算公式,参数 a,b,v 分别指定了技能释放者所在队伍、技能承受者所在队伍以及所需的变量。
如果伤害结果是恢复,那么就会返回一个负值


但  value = item.damage.eval(user, self, $game_variables)   
明明傳進去的 是 user, item,, $game_variables
與a b  c 的 技能释放者所在队伍、技能承受者所在队伍以及所需的变量 解釋不符合


所以 我那裡搞混了 ?

  
作者: fux2    时间: 2013-12-21 15:17
是你哪里搞混了吧,b明明是self,是一个game_battler,为什么变成 item了。
作者: tan12345    时间: 2013-12-21 15:33
a=user,b=self,v=$game_variables,传进去后a相当于发动者,b就是技能指向方(单体敌人、全体敌人、单体队友等等),还有,item的意思是对象是物品还是技能,这个对象调用damage方法返回的对象再调用eval方法
{:2_270:}感觉越解释越乱?
作者: graygod    时间: 2013-12-21 16:34
fux2 发表于 2013-12-21 15:17
是你哪里搞混了吧,b明明是self,是一个game_battler,为什么变成 item了。

value = item.damage.eval(user, self, $game_variables)   


self  不是指 item.damage.eval(user, self, $game_variables)    最前面的 item?
作者: fux2    时间: 2013-12-21 16:49
graygod 发表于 2013-12-21 16:34
value = item.damage.eval(user, self, $game_variables)   

凭什么game_battler里面的self指的是item.
作者: taroxd    时间: 2013-12-21 16:54
graygod 发表于 2013-12-21 16:34
value = item.damage.eval(user, self, $game_variables)   

self指的是这个方法执行的对象。
比如说a.make_damage_value,那么这个方法中的self就是指a
作者: 余烬之中    时间: 2013-12-21 18:22
一个略复杂的例子:
RUBY 代码复制
  1. class Unit # 定义一个类 作战单位
  2.         attr_accessor :name # 名字和生命值
  3.         attr_accessor :hp
  4.         def initialize(name) # 实例初始化 确定名字
  5.                 @name = name
  6.                 @hp = 100
  7.         end
  8.         def alive # 判定是否存活
  9.                 @hp > 0
  10.         end
  11.         def attack(aim) # 攻击
  12.                 return if !alive
  13.                 if !aim.alive
  14.                         puts "It's dead."
  15.                         return
  16.                 end
  17.                 aim.attacked(45) # 敌方被攻击
  18.                 puts "#{self} damaged #{aim.inspect}!"
  19.                 if !aim.alive ######################################################################################
  20.                         kill(aim) # 如果 敌方死亡 显示文字
  21.                 else          # 否则
  22.                       # 调用敌方的 attack    其中用到了参数 self
  23.                         aim.attack(self) # 如果 self 指的是 aim    就会导致敌人攻击自己
  24.                                      # 但实际上敌人会攻击这个对象
  25.                 end           # 因为 self 是在这个类中 永远指作为调用者的这个类的实例
  26.         end               # 在下面可以看到 调用者首先是 hero  此时 self 指hero   当hero调用了monster的attack时
  27.         def attacked(damage) # 在monster的过程中 self 又指monster
  28.                 @hp -= damage    ###################################################################################
  29.         end
  30.         def kill(aim)
  31.                 puts "\n +=+=+= #{self} killed #{aim}! =+=+=+"
  32.         end
  33.         def to_s # 使名称能被显示  这个方法会在puts中自动调用
  34.                 @name
  35.         end
  36. end
  37.  
  38. hero = Unit.new("Hero") # 创建单位
  39. monster = Unit.new("Monster")
  40.  
  41. puts " --- Battle Start --- " # 战斗开始
  42. hero.attack(monster) # hero 首先攻击   按照上面的算法 hero会赢
  43. puts "\n --- #{hero.alive ? hero : monster} wins! ---"


结果

--- Battle Start ---
Hero damaged Monster!
Monster damaged Hero!
Hero damaged Monster!
Monster damaged Hero!
Hero damaged Monster!

+=+=+= Hero killed Monster! =+=+=+

--- Hero wins! ---
作者: graygod    时间: 2013-12-21 20:10
taroxd 发表于 2013-12-21 16:54
self指的是这个方法执行的对象。
比如说a.make_damage_value,那么这个方法中的self就是指a ...

感謝  是我搞混了




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