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

Project1

 找回密码
 注册会员
搜索

[已解决]如何让单个人的状态栏进行刷新?

查看数: 3349 | 评论数: 4 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-4-3 18:54

正文摘要:

本帖最后由 miantouchi 于 2020-4-6 18:15 编辑 直接上图吧,敌人用的是群攻,是逐个攻击,但是现在有个问题就是,瞬间所有人的HP血槽,直接刷新出来了。 我需要的是,攻击-出现伤害-血槽扣血这个顺序依次执行。 ...

回复

a7466666 发表于 2020-8-9 19:27:01
涨知识了
灯笼菜刀王 发表于 2020-4-6 15:13:15
本帖最后由 灯笼菜刀王 于 2020-4-6 15:21 编辑
  1.   def refresh
  2.     @item_max = $game_party.actors.size
  3.     for i in 0...@item_max
  4.       if (actor = $game_party.actors[i]).状态窗口刷新开关
  5.         actor.状态窗口刷新开关 = false
  6.         actor_x = i * 160 + 4
  7.         self.contents.fill_rect(Rect.new(actor_x-4,0,160,160),Color.new(0,0,0,0))
  8.         draw_actor_hp(actor, actor_x, 32, 120)
  9.         draw_actor_sp(actor, actor_x, 64, 120)
  10.         if @level_up_flags[i]
  11.           self.contents.font.color = normal_color
  12.           self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
  13.         else
  14.           draw_actor_state(actor, actor_x, 96)
  15.         end
  16.       end
  17.     end
  18.   end
复制代码

点评

我今天又优化了下就在用的地方用这个新的刷新方法,其他地方都用以前的,还在优化中  发表于 2020-4-7 15:48
没那么高端, 默认脚本就有使用, 而且你也曾经提问过相关问题-.-  发表于 2020-4-6 18:57
fill_rect的意思是写之前,覆盖一层透明的盖住,再写,如此往复,真是巧妙啊,能解决这个问题,估计以后我这个游戏脚本即使别人拿去也整不明白...  发表于 2020-4-6 18:34
生怕哪个地方漏了,造成故障  发表于 2020-4-6 18:23
好了成功了,现在多出都加了这个开关凡是有@status_window.refresh处都加了,感觉像插了浑身的管子....  发表于 2020-4-6 18:06

评分

参与人数 2星屑 +100 +2 收起 理由
RyanBern + 100 + 1 认可答案
miantouchi + 1 认可答案

查看全部评分

miantouchi 发表于 2020-4-6 14:56:08
本帖最后由 miantouchi 于 2020-4-6 15:01 编辑
灯笼菜刀王 发表于 2020-4-4 20:01
最简单的方法就是把Window_BattleStatu分四份,自己刷新自己的, 刷新时机为伤害显示结束,反正你已经有这个开 ...


根据你的提示,我先发下,我写的,已经成功建了4个窗口,接下来不太会弄了。
如果在    战斗场景调用@status_window.refresh还是一样的
我想把@status_window.refresh(@target)这样的形式传入进去。
就也是,目标是谁,就刷新谁的窗口
但是感觉把def refresh(target) ,这样定义加个参数有点怪怪的。
我这段是用数组的办法
  1. #==============================================================================
  2. # ■ Window_BattleStatus
  3. #------------------------------------------------------------------------------
  4. #  显示战斗画面同伴状态的窗口。
  5. #==============================================================================

  6. class Window_BattleStatus < Window_Base
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #--------------------------------------------------------------------------
  10.   def initialize
  11.     super(0, 320, 640, 160)
  12.     @w = []
  13.     (0..$game_party.actors.size - 1).each do|i|
  14.       @w[i] = Window_Base.new(320 - $game_party.actors.size * 80 + i*160, 100, 160, 160)
  15.       @w[i].back_opacity = 0
  16.       @w[i].contents = Bitmap.new(width - 32, height - 32)
  17.     end
  18.     self.contents = Bitmap.new(width - 32, height - 32)
  19.     @actor = actor
  20.     @level_up_flags = [false, false, false, false]
  21.     refresh
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # ● 释放
  25.   #--------------------------------------------------------------------------
  26.   def dispose
  27.     super
  28.     @w.each {|w|w.dispose}
  29.   end
  30.   #--------------------------------------------------------------------------
  31.   # ● 设置升级标志
  32.   #     actor_index : 角色索引
  33.   #--------------------------------------------------------------------------
  34.   def level_up(actor_index)
  35.     @level_up_flags[actor_index] = true
  36.   end
  37.   #--------------------------------------------------------------------------
  38.   # ● 刷新
  39.   #--------------------------------------------------------------------------
  40.   def refresh
  41.     (0...$game_party.actors.size).each {|i| @w[i].contents.clear}
  42.     @item_max = $game_party.actors.size
  43.     for i in 0...$game_party.actors.size
  44.       actor = $game_party.actors[i]
  45.       actor_x = 4#i * 160 + 4
  46.       @w[i].draw_actor_name(actor, actor_x, 0)
  47.       @w[i].draw_actor_hp(actor, actor_x, 32, 120)
  48.       @w[i].draw_actor_sp(actor, actor_x, 64, 120)
  49.       if @level_up_flags[i]
  50.         @w[i].contents.font.color = normal_color
  51.         @w[i].contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
  52.       else
  53.         @w[i].draw_actor_state(actor, actor_x, 96)
  54.       end
  55.     end
  56.   end
  57. end
复制代码
灯笼菜刀王 发表于 2020-4-4 20:01:24
最简单的方法就是把Window_BattleStatu分四份,自己刷新自己的, 刷新时机为伤害显示结束,反正你已经有这个开关了

2,改造refresh, 不直接把整个contents.clear, 而是分成4部分, 用contents.fill_rect去一个一个清除并重写, 刷新条件一样为伤害显示结束

3,把扣HP的操作挪到伤害显示结束来处理,然后同步刷新窗口, 不过这时self.damage是已经清零了,数值要另外记录就是了比较麻烦

注意以上的方法都可能和你用的脚本会有冲突(比如血条之类的), 自己多多排查吧

点评

如果会用数组建窗口,这个是最方便的做法,因为不用考虑更改刷新条件,只不过是把单变量刷新变成数组循环刷新而已  发表于 2020-4-4 21:22
当然不用,只不过是把本来一个窗口分成4个,每个窗口显示单独的角色而已,做法同window state, 分别带入$game_party.actors[0-3]就是了  发表于 2020-4-4 21:21
第3个方法感觉难度太大,肯定要对战斗流程有充分理解才敢改,冲突能最大,已现有的流程 。  发表于 2020-4-4 20:25
好的,我先试试第2个方法,第1个方法感觉如果角色多了10多个角色的话那岂不是要建10个Window_BattleStatu。  发表于 2020-4-4 20:25
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-25 13:47

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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