Project1

标题: 求敌人根据mp变身脚本 [打印本页]

作者: archmagetony    时间: 2015-12-31 16:44
标题: 求敌人根据mp变身脚本
本帖最后由 archmagetony 于 2015-12-31 17:39 编辑

大概有一个想法就是敌人会根据mp的不同会变身,比如说敌人001,当mp小于50%的时候变身为002,因为敌人数量较多并且要变身的也挺多的,用事件的话工程量有一些太大了想求各位大大帮忙。
大概希望的脚本的输入的样子就是
有一个输入的地方
  ENEMIES[1] = [001,002,003,004,005]     敌人001可以根据mp百分比不同变身成002,003,004,005(有一个变身的就行,后面的我应该自己能尝试的写出来)

我看到Game_Interpreter里面有这么一段函数
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 敌人变身
  3.   #--------------------------------------------------------------------------
  4.   def command_336
  5.     iterate_enemy_index(@params[0]) do |enemy|
  6.       enemy.transform(@params[1])
  7.       $game_troop.make_unique_names
  8.     end
  9.   end


大概写到这个样子就不会写了。。。。。。告诉我transform方法未定义。。我想直接调用Game_Enemy类里面的transform方法。。。但是我前面用的是了Game_BattlerBase  这个类了。。。怎么才能同时用Game_BattlerBase类跟Game_Enemy类?还是说transform这个方法也得是我自己重新写?


RUBY 代码复制
  1. class Game_BattlerBase  
  2.    alias refresh_new refresh
  3.    def refresh
  4.     refresh_new
  5.     @hp = [[@hp, mhp].min, 0].max
  6.     @mhp = mhp
  7.     @mp = [[@mp, mmp].min, 0].max
  8.     @mmp = mmp
  9.     x=((@mp * 100)/@mmp)
  10.     y=((@hp * 100)/@mhp)
  11.     if @actor_id != 1
  12.       case x
  13.       when 1...50
  14. #--------------------------------------------------------------------------
  15.   # 1111111111111
  16.   #--------------------------------------------------------------------------
  17.       if @enemy_id ==60
  18.       puts "qqqq"
  19.       enemy = $game_troop.members[@enemy_id]
  20.       enemy.transform(61)
  21.       $game_troop.make_unique_names
  22.     puts "www"
  23.     else
  24.       puts "12"
  25.       end
  26.   #--------------------------------------------------------------------------
  27.   # 11111111111111111111
  28.   #--------------------------------------------------------------------------
  29.       end
  30.     end
  31.   end
  32. end
  
作者: 喵呜喵5    时间: 2016-1-1 23:55
Game_Enemy 是 Game_BattlerBase类 的子类(的子类),因此你的这段代码完全可以写在 Game_Enemy 的 refresh 中

或者应该说………… 你会在Game_BattlerBase中判断 if @actor_id != 1 其实我觉得挺神奇的,因为@actor_id 也不在 Game_BattlerBase 中,而在其子类 Game_Actor 中,在这里判断的话没有额外定义则永远 !=1 …………
作者: archmagetony    时间: 2016-1-5 17:07
喵呜喵5 发表于 2016-1-1 23:55
Game_Enemy 是 Game_BattlerBase类 的子类(的子类),因此你的这段代码完全可以写在 Game_Enemy 的 refres ...

但是Game_Enemy里面没有refresh这个函数啊。。。。。只是在敌人变身这里面调用过一次。。。。是说我要在这里面自己创建一个refresh然后改名继承然后加上我的那些判断代码?新人关于这个不是特别的懂。。。。请多指教下。。谢谢
作者: 喵呜喵5    时间: 2016-1-5 17:20
  1. class A
  2.   def hello
  3.     p 'hello'
  4.   end
  5. end
  6. class B < A
  7. end
  8. class C < A
  9.   def hello
  10.     p 'world'
  11.   end
  12. end
  13. class D < A
  14.   def hello
  15.     super
  16.     p 'world'
  17.   end
  18. end

  19. a = A.new
  20. b = B.new
  21. c = C.new
  22. d = D.new
  23. a.hello # => 'hello'
  24. b.hello # => 'hello'
  25. c.hello # => 'world'
  26. d.hello # => 'hello world'
复制代码
涉及到 Ruby 类的继承相关的问题,请参考上面这段代码




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