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

Project1

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

[已经解决] 关于Game_Battler脚本的一个疑问

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3298
在线时间
1120 小时
注册时间
2009-4-15
帖子
815
跳转到指定楼层
1
发表于 2014-10-31 22:07:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
在Game_Battler脚本下有个函数:
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 应用“状态附加”效果:普通
  3.   #--------------------------------------------------------------------------
  4.   def item_effect_add_state_normal(user, item, effect)
  5.     chance = effect.value1
  6.     chance *= state_rate(effect.data_id) if opposite?(user)
  7.     chance *= luk_effect_rate(user)      if opposite?(user)
  8.     if rand < chance
  9.       add_state(effect.data_id)
  10.       @result.success = true
  11.     end
  12.   end

整个函数内容好像被没有使用item这个参数,那么,传递这个参数给item_effect_add_state_normal有什么意义呢?

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21711
在线时间
9422 小时
注册时间
2012-6-19
帖子
7119

开拓者短篇九导演组冠军

2
发表于 2014-10-31 22:25:45 | 只看该作者
本帖最后由 喵呜喵5 于 2014-10-31 22:38 编辑

Game_Battler:
  1.   #--------------------------------------------------------------------------
  2.   # ● 应用使用效果
  3.   #--------------------------------------------------------------------------
  4.   def item_effect_apply(user, item, effect)
  5.     method_table = {
  6.       EFFECT_RECOVER_HP    => :item_effect_recover_hp,
  7.       EFFECT_RECOVER_MP    => :item_effect_recover_mp,
  8.       EFFECT_GAIN_TP       => :item_effect_gain_tp,
  9.       EFFECT_ADD_STATE     => :item_effect_add_state,
  10.       EFFECT_REMOVE_STATE  => :item_effect_remove_state,
  11.       EFFECT_ADD_BUFF      => :item_effect_add_buff,
  12.       EFFECT_ADD_DEBUFF    => :item_effect_add_debuff,
  13.       EFFECT_REMOVE_BUFF   => :item_effect_remove_buff,
  14.       EFFECT_REMOVE_DEBUFF => :item_effect_remove_debuff,
  15.       EFFECT_SPECIAL       => :item_effect_special,
  16.       EFFECT_GROW          => :item_effect_grow,
  17.       EFFECT_LEARN_SKILL   => :item_effect_learn_skill,
  18.       EFFECT_COMMON_EVENT  => :item_effect_common_event,
  19.     }
  20.     method_name = method_table[effect.code]
  21.     send(method_name, user, item, effect) if method_name
  22.   end
复制代码
在method_table中读取方法名称,之后使用send调用对应名称的方法,并传递三个参数:user, item, effect
如果这里把
def item_effect_add_state_normal(user, item, effect)
改成
def item_effect_add_state_normal(user, effect)
的话
上面那个方法就只能改成成这样:
  1.   def item_effect_apply(user, item, effect)
  2.     method_table = {
  3.       EFFECT_RECOVER_HP    => :item_effect_recover_hp,
  4.       EFFECT_RECOVER_MP    => :item_effect_recover_mp,
  5.       EFFECT_GAIN_TP       => :item_effect_gain_tp,
  6.       EFFECT_ADD_STATE     => :item_effect_add_state,
  7.       EFFECT_REMOVE_STATE  => :item_effect_remove_state,
  8.       EFFECT_ADD_BUFF      => :item_effect_add_buff,
  9.       EFFECT_ADD_DEBUFF    => :item_effect_add_debuff,
  10.       EFFECT_REMOVE_BUFF   => :item_effect_remove_buff,
  11.       EFFECT_REMOVE_DEBUFF => :item_effect_remove_debuff,
  12.       EFFECT_SPECIAL       => :item_effect_special,
  13.       EFFECT_GROW          => :item_effect_grow,
  14.       EFFECT_LEARN_SKILL   => :item_effect_learn_skill,
  15.       EFFECT_COMMON_EVENT  => :item_effect_common_event,
  16.     }
  17.     method_name = method_table[effect.code]
  18.     if effect.code == EFFECT_ADD_STATE
  19.       item_effect_add_state_normal(user, effect)      
  20.     else
  21.       send(method_name, user, item, effect) if method_name
  22.     end
  23.   end
复制代码
顺带一提,其实我自己觉得将这个方法改成case when也没啥大问题,并且也不用传递多余的参数了……
RUBY 代码复制
  1. def item_effect_apply(user, item, effect)
  2.     case effect.code
  3.     when EFFECT_RECOVER_HP then item_effect_recover_hp(user, item, effect)
  4.     when 对应的Code        then 对应的方法(方法参数)
  5.     end
  6.   end

但是如果之后其他人需要猴补item_effect_apply这个方法同时需要获取对应物品注释的时候应该怎么办?

评分

参与人数 1梦石 +2 收起 理由
VIPArcher + 2 好详细啊。

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3298
在线时间
1120 小时
注册时间
2009-4-15
帖子
815
3
 楼主| 发表于 2014-10-31 22:33:40 | 只看该作者
喵呜喵5 发表于 2014-10-31 22:25
Game_Battler:在method_table中读取方法名称,之后使用send调用对应名称的方法,并传递三个参数:user, it ...

OK,了解,之前没有查到源头,所以这段正好没看到……
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-3 07:38

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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