Project1

标题: 请教“当状态是26或者27时”这个判定有什么简化的写法吗? [打印本页]

作者: 远坂焰    时间: 2014-3-28 13:32
标题: 请教“当状态是26或者27时”这个判定有什么简化的写法吗?
本帖最后由 远坂焰 于 2014-3-28 13:35 编辑

目前用的方法是
RUBY 代码复制
  1. class Game_Battler < Game_BattlerBase
  2.   #--------------------------------------------------------------------------
  3.   # ● 计算伤害
  4.   #--------------------------------------------------------------------------
  5.   def make_damage_value(user, item)
  6.     value = item.damage.eval(user, self, $game_variables)
  7.     value *= item_element_rate(user, item)
  8.     value *= pdr if item.physical?
  9.     value *= mdr if item.magical?
  10.     value *= rec if item.damage.recover?
  11.     value = apply_critical(value) if @result.critical
  12.     value = apply_variance(value, item.damage.variance)
  13.     value = apply_guard(value)
  14.     @result.make_damage(value.to_i, item, user.state?(26) || user.state?(27))
  15.   end
  16. end

但是感觉有点繁琐
这样话的如果3个或者3个以上的状态时写的也太长了吧
试了下
user.state?(26 || 27)
结果悲哀的发现只会判定括号内的真假 所以26判定的永远是真只会返回26 27根本就没被计算
如果是
user.state?(26,27)
当其中任意一个状态触发时就会提示错误 wrong number of arguments (2 of 1)
求教有什么符号能放在 26和27 之间就达成(26或者27)的效果吗
作者: taroxd    时间: 2014-3-28 15:28
本帖最后由 taroxd 于 2014-3-28 16:56 编辑

看了楼主的想法,还是请楼主好好学习Ruby

你可以主动定义一个方法
比如在Game_BattlerBase中定义
  1. def any_state?(*args)
  2.   args.any? {|n| state?(n) }
  3. end
复制代码
这样就可以使用user.any_state?(26,27)  了
或者只是偶尔使用的话,可以
  1. [26,27,28,29].any? {|n| user.state?(n) }
复制代码
以上代码均在无环境时写下并且未经过测试
作者: 远坂焰    时间: 2014-3-28 16:25
本帖最后由 远坂焰 于 2014-3-28 16:45 编辑
taroxd 发表于 2014-3-28 15:28
看了楼主的想法,情楼主好好学习Ruby

你可以主动定义一个方法


实测可行 非常感谢 大大已经帮助岚好几次了呢 求大大昵称
RGSS3岚完全初学者的说
目前在努力学习《入门教程大家写V1.1》
另外大大的脚本合集帖帮助也非常大 学到了不少东西
但是人太笨 很多还不会运用
def any_state?(*args) 和 [26,27,28,29].any? 对照着还能看懂
但是 {|n| state?(n) } 是什么意思呢?
大括号是指里面是变量 state?(n)是指状态n吗 |n|又是指什么额




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