设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2535|回复: 7
打印 上一主题 下一主题

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

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
292 小时
注册时间
2009-10-30
帖子
24
跳转到指定楼层
1
发表于 2013-12-21 04:58:29 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

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


所以 我那裡搞混了 ?

  

Lv1.梦旅人

梦石
0
星屑
50
在线时间
292 小时
注册时间
2009-10-30
帖子
24
8
 楼主| 发表于 2013-12-21 20:10:49 | 只看该作者
taroxd 发表于 2013-12-21 16:54
self指的是这个方法执行的对象。
比如说a.make_damage_value,那么这个方法中的self就是指a ...

感謝  是我搞混了
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

百合控

梦石
0
星屑
6543
在线时间
1275 小时
注册时间
2013-8-21
帖子
3657

开拓者

7
发表于 2013-12-21 18:22:46 | 只看该作者
一个略复杂的例子:
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! ---

评分

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

查看全部评分

萌新瑟瑟发抖
看到我请叫我去干活
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

6
发表于 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 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
41174
在线时间
7574 小时
注册时间
2009-7-6
帖子
13499

开拓者贵宾

5
发表于 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
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
292 小时
注册时间
2009-10-30
帖子
24
4
 楼主| 发表于 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?
回复 支持 反对

使用道具 举报

Lv3.寻梦者

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

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
41174
在线时间
7574 小时
注册时间
2009-7-6
帖子
13499

开拓者贵宾

2
发表于 2013-12-21 15:17:00 | 只看该作者
是你哪里搞混了吧,b明明是self,是一个game_battler,为什么变成 item了。

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-10-5 07:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表