Game_Troop脚本页中的这段:
#-------------------------------------------------------------------------- # ● 计算经验值的总数 #-------------------------------------------------------------------------- def exp_total dead_members.inject(0) {|r, enemy| r += enemy.exp } end
#--------------------------------------------------------------------------
# ● 计算经验值的总数
#--------------------------------------------------------------------------
def exp_total
dead_members.inject(0) {|r, enemy| r += enemy.exp }
end
而代表着双方角色等级的变量是:
当前所遇敌群的编号变量是:
那么再来看看Ruby中inject函数的用法:
[2,4,6,8].inject(0) { |sum,element| sum + element } 输出结果:20 [2,4,6,8].inject(1) { |product,element| product * element } 输出结果:384 当inject有参数时,inject后面的block第一次执行时,sum或product的值被设置为参数的值,而element的值被设置为集合中第一个元素的值。接下来每次再执行block时,sum或product的值被设置为上次调用block时的返回值,element即为集合中下一个元素的值。inject的最终结果是最后一次调用block的返回值。
[2,4,6,8].inject(0) { |sum,element| sum + element } 输出结果:20
[2,4,6,8].inject(1) { |product,element| product * element } 输出结果:384
当inject有参数时,inject后面的block第一次执行时,sum或product的值被设置为参数的值,而element的值被设置为集合中第一个元素的值。接下来每次再执行block时,sum或product的值被设置为上次调用block时的返回值,element即为集合中下一个元素的值。inject的最终结果是最后一次调用block的返回值。
简而言之,就是 r 是一个储存经验值的临时变量,而 enemy 就是组成 dead_members 这个复合数组的结构单元,其作用就是把 dead_members 中所有 enemy 对象中的 exp 属性叠加求和。
之后又涉及了一个脚本的基础用法:
def exp_effect i = 0 until i >= n do if @troop_id == m return $game_actors[x] / 10 + 4 end end end
def exp_effect
i = 0
until i >= n do
if @troop_id == m
return $game_actors[x] / 10 + 4
end
end
end
之后的部分明白就是明白,不明白我也没办法了……
修改函数在脚本技术里可是基础= = |