Project1

标题: 方法的改名與繼承? [打印本页]

作者: graygod    时间: 2017-2-27 12:50
标题: 方法的改名與繼承?
本帖最后由 graygod 于 2017-2-27 13:02 编辑

使用了很多腳本   出錯了  我知道錯在那  只是不能理解


首先是 最底下的腳本


class Game_Actor < Game_Battler

  alias use_item_bubs_mix use_item
  def use_item(item)
     p "1"
    use_item_bubs_mix(item) # alias
  end
end

中間的腳本
class Game_Battler < Game_BattlerBase
alias use_item_all_ve_toggle_target use_item
  def use_item(item)
    p "2"
    use_item_all_ve_toggle_target(item)
  end

end

最上面的腳本
class Game_Battler < Game_BattlerBase

def use_item(item)
   p "3"
    pay_skill_cost(item) if item.is_a?(RPG::Skill)
    consume_item(item)   if item.is_a?(RPG::Item)
    item.effects.each {|effect| item_global_effect_apply(effect) }
  end
  
  end

問題來了   我在最底下  在增加一個

class Game_Battler < Game_BattlerBase

def use_item(item)
   p "4"
  end
  
但結果仍然是  印出   
1
2
3

而不是
1
4
最下面的腳本都不會執行   請問是我那裡觀念錯了


作者: 喵呜喵5    时间: 2017-2-27 13:03
本帖最后由 喵呜喵5 于 2017-2-27 13:06 编辑

这是一个 alias 的陷阱
具体的细节看这里:https://rpg.blue/thread-383400-1-1.html?_dsign=c57e9efb
一个解决方案看这里:https://github.com/miaowm5/RGSS3 ... 6%96%B9%E5%BC%8F.rb

套用到你这个问题里,锅在这段代码中:
  1. class Game_Actor < Game_Battler

  2.   alias use_item_bubs_mix use_item
  3.   def use_item(item)
  4.      p "1"
  5.     use_item_bubs_mix(item) # alias
  6.   end
  7. end
复制代码


稍加修改变成这样即可解决问题:
  1. class Game_Actor < Game_Battler
  2.   instance_methods(false).include?(:use_item) ||
  3.     (def use_item *args; super; end)
  4.   alias use_item_bubs_mix use_item
  5.   def use_item(item)
  6.      p "1"
  7.     use_item_bubs_mix(item) # alias
  8.   end
  9. end
复制代码





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