查看: 3157|回复: 7

[已经解决] make_damage_value(user, item)方法

[复制链接]
梦石
0
星屑
50
在线时间
292 小时
注册时间
2009-10-30
回帖
18
发表于 2013-12-21 04:58:29 | 显示全部楼层 |阅读模式

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

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

×
在 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 的 技能释放者所在队伍、技能承受者所在队伍以及所需的变量 解釋不符合


所以 我那裡搞混了 ?

  

老黄鸡

梦石
4
星屑
45707
在线时间
7951 小时
注册时间
2009-7-6
回帖
13338

MZ评测员RM创作大赛01组委会开拓者贵宾

发表于 2013-12-21 15:17:00 | 显示全部楼层
是你哪里搞混了吧,b明明是self,是一个game_battler,为什么变成 item了。

评分

参与人数 1星屑 +100 收起 理由
Sion + 100 认可答案

查看全部评分

RGDirect - DirectX驱动的RGSS,点我了解.
(排满,暂停)RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

梦石
0
星屑
3348
在线时间
1120 小时
注册时间
2009-4-15
回帖
761
发表于 2013-12-21 15:33:46 | 显示全部楼层
a=user,b=self,v=$game_variables,传进去后a相当于发动者,b就是技能指向方(单体敌人、全体敌人、单体队友等等),还有,item的意思是对象是物品还是技能,这个对象调用damage方法返回的对象再调用eval方法
{:2_270:}感觉越解释越乱?

评分

参与人数 1星屑 +100 收起 理由
Sion + 100 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
50
在线时间
292 小时
注册时间
2009-10-30
回帖
18
 楼主| 发表于 2013-12-21 16:34:13 | 显示全部楼层
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?
回复

使用道具 举报

老黄鸡

梦石
4
星屑
45707
在线时间
7951 小时
注册时间
2009-7-6
回帖
13338

MZ评测员RM创作大赛01组委会开拓者贵宾

发表于 2013-12-21 16:49:52 | 显示全部楼层
graygod 发表于 2013-12-21 16:34
value = item.damage.eval(user, self, $game_variables)   

凭什么game_battler里面的self指的是item.
RGDirect - DirectX驱动的RGSS,点我了解.
(排满,暂停)RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2013-12-21 16:54:16 | 显示全部楼层
graygod 发表于 2013-12-21 16:34
value = item.damage.eval(user, self, $game_variables)   

self指的是这个方法执行的对象。
比如说a.make_damage_value,那么这个方法中的self就是指a

评分

参与人数 1星屑 +100 收起 理由
Sion + 100 认可答案

查看全部评分

回复

使用道具 举报

百合控

梦石
0
星屑
6548
在线时间
1275 小时
注册时间
2013-8-21
回帖
3522

开拓者

发表于 2013-12-21 18:22:46 | 显示全部楼层
一个略复杂的例子:
[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! ---

评分

参与人数 1梦石 +1 收起 理由
Sion + 1 认可答案

查看全部评分

萌新瑟瑟发抖
看到我请叫我去干活
回复

使用道具 举报

梦石
0
星屑
50
在线时间
292 小时
注册时间
2009-10-30
回帖
18
 楼主| 发表于 2013-12-21 20:10:49 | 显示全部楼层
taroxd 发表于 2013-12-21 16:54
self指的是这个方法执行的对象。
比如说a.make_damage_value,那么这个方法中的self就是指a ...

感謝  是我搞混了
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部