查看: 1738|回复: 3

[已经解决] 求敌人根据mp变身脚本

[复制链接]
梦石
0
星屑
143
在线时间
82 小时
注册时间
2015-5-15
回帖
27
发表于 2015-12-31 16:44:46 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 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里面有这么一段函数
[pre lang="ruby"]  #--------------------------------------------------------------------------
  # ● 敌人变身
  #--------------------------------------------------------------------------
  def command_336
    iterate_enemy_index(@params[0]) do |enemy|
      enemy.transform(@params[1])
      $game_troop.make_unique_names
    end
  end[/pre]

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


[pre lang="ruby"]class Game_BattlerBase  
   alias refresh_new refresh
   def refresh
    refresh_new
    @hp = [[@hp, mhp].min, 0].max
    @mhp = mhp
    @mp = [[@mp, mmp].min, 0].max
    @mmp = mmp
    x=((@mp * 100)/@mmp)
    y=((@hp * 100)/@mhp)
    if @actor_id != 1
      case x
      when 1...50
#--------------------------------------------------------------------------
  # 1111111111111
  #--------------------------------------------------------------------------
      if @enemy_id ==60
      puts "qqqq"
      enemy = $game_troop.members[@enemy_id]
      enemy.transform(61)
      $game_troop.make_unique_names
    puts "www"
    else
      puts "12"
      end
  #--------------------------------------------------------------------------
  # 11111111111111111111
  #--------------------------------------------------------------------------
      end
    end
  end
end
[/pre]  

梦石
1
星屑
23246
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2016-1-1 23:55:14 | 显示全部楼层
Game_Enemy 是 Game_BattlerBase类 的子类(的子类),因此你的这段代码完全可以写在 Game_Enemy 的 refresh 中

或者应该说………… 你会在Game_BattlerBase中判断 if @actor_id != 1 其实我觉得挺神奇的,因为@actor_id 也不在 Game_BattlerBase 中,而在其子类 Game_Actor 中,在这里判断的话没有额外定义则永远 !=1 …………

点评

1号角色触发这段代码的时候还是会 == 1的  发表于 2016-1-2 07:49
回复

使用道具 举报

梦石
0
星屑
143
在线时间
82 小时
注册时间
2015-5-15
回帖
27
 楼主| 发表于 2016-1-5 17:07:21 | 显示全部楼层
喵呜喵5 发表于 2016-1-1 23:55
Game_Enemy 是 Game_BattlerBase类 的子类(的子类),因此你的这段代码完全可以写在 Game_Enemy 的 refres ...

但是Game_Enemy里面没有refresh这个函数啊。。。。。只是在敌人变身这里面调用过一次。。。。是说我要在这里面自己创建一个refresh然后改名继承然后加上我的那些判断代码?新人关于这个不是特别的懂。。。。请多指教下。。谢谢
回复

使用道具 举报

梦石
1
星屑
23246
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2016-1-5 17:20:08 | 显示全部楼层
  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 类的继承相关的问题,请参考上面这段代码

点评

应该是做完了,感谢帮助  发表于 2016-1-9 19:46
super 的 意思可以看成是:把父类中的这个方法中定义的内容执行一遍  发表于 2016-1-8 13:38
哦哦,要加上super,再想问一个问题那如果我想让父类后执行把super放在后面是不是就可以了?谢谢  发表于 2016-1-8 13:36
请参考上面这段代码,看看 c 和 d 之间的区别  发表于 2016-1-6 19:47
那这个意思就是我直接在Game_Enemy里面写def refresh这个函数,里面加入我做判断变身的那段就可以了?  发表于 2016-1-6 19:25

评分

参与人数 1梦石 +1 收起 理由
VIPArcher + 1 认可答案

查看全部评分

回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部