设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1377|回复: 3
打印 上一主题 下一主题

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

[复制链接]

Lv1.梦旅人

梦石
0
星屑
143
在线时间
82 小时
注册时间
2015-5-15
帖子
40
跳转到指定楼层
1
发表于 2015-12-31 16:44:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 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
  

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21631
在线时间
9415 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

2
发表于 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
回复 支持 反对

使用道具 举报

Lv1.梦旅人

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

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

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21631
在线时间
9415 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

4
发表于 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 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-17 07:25

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表