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
一个略复杂的例子:
[pre lang="ruby" line="1"]class Unit # 定义一个类 作战单位
        attr_accessor :name # 名字和生命值
        attr_accessor :hp
        def initialize(name) # 实例初始化 确定名字
                @name = name
                @hp = 100
        end
        def alive # 判定是否存活
                @hp > 0
        end
        def attack(aim) # 攻击
                return if !alive
                if !aim.alive
                        puts "It's dead."
                        return
                end
                aim.attacked(45) # 敌方被攻击
                puts "#{self} damaged #{aim.inspect}!"
                if !aim.alive ######################################################################################
                        kill(aim) # 如果 敌方死亡 显示文字
                else          # 否则
                      # 调用敌方的 attack    其中用到了参数 self
                        aim.attack(self) # 如果 self 指的是 aim    就会导致敌人攻击自己
                                     # 但实际上敌人会攻击这个对象
                end           # 因为 self 是在这个类中 永远指作为调用者的这个类的实例
        end               # 在下面可以看到 调用者首先是 hero  此时 self 指hero   当hero调用了monster的attack时
        def attacked(damage) # 在monster的过程中 self 又指monster
                @hp -= damage    ###################################################################################
        end
        def kill(aim)
                puts "\n +=+=+= #{self} killed #{aim}! =+=+=+"
        end
        def to_s # 使名称能被显示  这个方法会在puts中自动调用
                @name
        end
end

hero = Unit.new("Hero") # 创建单位
monster = Unit.new("Monster")

puts " --- Battle Start --- " # 战斗开始
hero.attack(monster) # hero 首先攻击   按照上面的算法 hero会赢
puts "\n --- #{hero.alive ? hero : monster} wins! ---"[/pre]

结果

--- 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! X5.0