Project1

标题: MOG动态血条的描绘方法 [打印本页]

作者: 流浪杰哥    时间: 2019-6-18 21:35
标题: MOG动态血条的描绘方法
本帖最后由 流浪杰哥 于 2019-6-18 21:40 编辑


RUBY 代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Window_Base
  4. #------------------------------------------------------------------------------
  5. #  游戏中所有窗口的父类
  6. #==============================================================================
  7.  
  8. class Window_Base < Window
  9.    def dispose
  10.     contents.dispose unless disposed?
  11.     super
  12.     dispose_meter#释放
  13.   end
  14.   def update
  15.     super
  16.     update_hp_meter#更新
  17.     update_tone
  18.     update_open if @opening
  19.     update_close if @closing
  20.   end
  21.  
  22.  
  23.   #绘制
  24.   def draw_actor_hp_meter(actor,x, y)
  25.       @meter_image = Cache.system("HP_Meter")
  26.       @meter_cw = @meter_image.width / 3
  27.       @meter_ch = @meter_image.height
  28.       @meter = Sprite.new
  29.       @meter.bitmap = Bitmap.new(@meter_cw,@meter_ch)
  30.       @meter.z = 101
  31.       @meter.x = x
  32.       @meter.y = y
  33.       @hp_flow = 0
  34.       @hp_flow_max = @meter_cw * 2  
  35.       @np = actor.hp
  36.       @nnp = actor.mhp
  37.   end
  38.  
  39.  
  40.     def dispose_meter
  41.       return if @meter == nil
  42.       @meter.bitmap.dispose
  43.       @meter.dispose
  44.       @meter = nil
  45.     end
  46.  
  47.  
  48.     def update_hp_meter
  49.       return if @meter_image == nil
  50.       @meter.bitmap.clear
  51.       hp_width = @meter_cw * @np / @nnp
  52.       hp_src_rect = Rect.new(@hp_flow, 0,hp_width, @meter_ch)
  53.       @meter.bitmap.blt(0,0, @meter_image, hp_src_rect)
  54.       @hp_flow += 1
  55.       @hp_flow = 0 if @hp_flow >= @hp_flow_max
  56.     end
  57. end

从MOG的脚本中取出了一段关于动态血条的描绘方法,想在Window_MenuStatus中描画出动态血条来,血条是出来了,是动态的,但是只描画了一个角色的血条,也不知道我的方式哪里有问题,附件中有详细的脚本,还请大佬指点一二呗

动态血条.zip

1.63 MB, 下载次数: 130


作者: KB.Driver    时间: 2019-6-18 21:50
因为你所有血条的精灵都叫@meter,后面生成的就覆盖了前面的。

如果追求方便,你可以新建@meters作为数组,每次draw_meter往数组里增加一个元素
然后在更新和释放的地方用@meters.each……来就好。
作者: 流浪杰哥    时间: 2019-6-18 22:18
KB.Driver 发表于 2019-6-18 21:50
因为你所有血条的精灵都叫@meter,后面生成的就覆盖了前面的。

如果追求方便,你可以新建@meters作为数组 ...

我看我就只能伸手了么么哒
作者: soulsaga    时间: 2019-6-18 23:37
RUBY 代码复制
  1. draw_actor_hp_meter(actor,rect.x+100, rect.y*index)

作者: 流浪杰哥    时间: 2019-6-19 08:21
soulsaga 发表于 2019-6-18 23:37
draw_actor_hp_meter(actor,rect.x+100, rect.y*index)[/pre]

看样子似乎很麻烦的说,目前还是没能解决
作者: 流浪杰哥    时间: 2019-6-21 15:53
暖帖,求大佬快快现身吧!
作者: soulsaga    时间: 2019-6-21 17:52
这玩意原版只能显示一人么..
作者: 流浪杰哥    时间: 2019-6-21 19:51
soulsaga 发表于 2019-6-21 17:52
这玩意原版只能显示一人么..


的确是只显示一个人,因为生成动态血条的方法是从MOG的BOSS血条里面取出来的一小段,我把它放到Window_Base里面,是为了方便在其他窗口下调用
作者: soulsaga    时间: 2019-6-21 20:19
本帖最后由 soulsaga 于 2019-6-21 20:30 编辑

不行..这个脚本是给一人用的..好难搞..
作者: 流浪杰哥    时间: 2019-6-21 22:20
soulsaga 发表于 2019-6-21 20:19
不行..这个脚本是给一人用的..好难搞..

就像2楼大佬说的,后面生成的精灵覆盖了前面的,但是具体要怎么改我也不知道,脚本我是不懂,我只知道从原始脚本复制出生成动态血条的方法。。。。。。
作者: soulsaga    时间: 2019-6-21 22:39
本帖最后由 soulsaga 于 2019-6-22 10:49 编辑

RUBY 代码复制
  1. def draw_actor_hp_meter(actor,x, y)
  2.       @meter_image = Cache.system("HP_Meter")
  3.       @meter_cw = @meter_image.width / 3
  4.       @meter_ch = @meter_image.height
  5.        @meter,np,nnp=[],[],[] if @meter.nil?
  6.       for i in 0...$game_party.members.size
  7.       @meter.push(Sprite.new)
  8.       @meter[i].bitmap = Bitmap.new(@meter_cw,@meter_ch)
  9.       @meter.z.push(101)
  10.       @meter.x.push(x)
  11.       @meter.y.push(y*i)
  12.       @hp_flow = 0
  13.       @hp_flow_max = @meter_cw * 2  
  14.       @np.push($game_party.members[i].hp)
  15.       @nnp.push($game_party.members[i].mhp)
  16.       end
  17.  
  18. def update_hp_meter
  19.       return if @meter_image == nil
  20.       @hp_width,@hp_src_rect=[],[] if @hp_width.nil?
  21.       for i in 0...$game_party.members.size
  22.       @meter[i].bitmap.clear
  23.       @hp_width.push(@meter_cw * @np[i] / @nnp[i])
  24.       @hp_src_rect[i] = Rect.new(@hp_flow[i], 0,@hp_width[i], @meter_ch)
  25.       @meter.bitmap[i].blt(0,0, @meter_image, @hp_src_rect[i])
  26.       end
  27.       @hp_flow += 1
  28.       @hp_flow = 0 if @hp_flow >= @hp_flow_max
  29.     end
  30.   end

作者: 流浪杰哥    时间: 2019-6-22 08:24
soulsaga 发表于 2019-6-21 22:39
def draw_actor_hp_meter(actor,x, y)
      @meter_image = Cache.system("HP_Meter")
      @meter_cw =  ...


似乎这一行报错了
作者: 流浪杰哥    时间: 2019-6-22 14:32
流浪杰哥 发表于 2019-6-22 08:24
似乎这一行报错了

似乎不可行……………………
作者: 流浪杰哥    时间: 2019-6-22 14:34
soulsaga 发表于 2019-6-21 22:39
def draw_actor_hp_meter(actor,x, y)
      @meter_image = Cache.system("HP_Meter")
      @meter_cw =  ...

讲真的,我有点想放弃了,唉…………




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