Project1

标题: 血条释放延迟 [打印本页]

作者: 冰水金刚    时间: 2014-7-18 17:05
标题: 血条释放延迟
本帖最后由 冰水金刚 于 2014-7-19 09:02 编辑

血条定义(Window_Help中)
RUBY 代码复制
  1. def set_enemy(enemy)
  2.     @hp = nil
  3.     @sp = nil
  4.     @hp_a = nil
  5.     @sp_a = nil
  6.     @hp = Sprite.new
  7.     @hp_a = Sprite.new
  8.     @sp = Sprite.new
  9.     @sp_a = Sprite.new
  10.     @hp.bitmap = Bitmap.new(130,5)
  11.     @hp_a.bitmap= Bitmap.new(130,5)
  12.     @sp.bitmap = Bitmap.new(130,5)
  13.     @sp_a.bitmap = Bitmap.new(130,5)
  14.     color1 = Color.new(150,150,150,255)
  15.     color2 = Color.new(255,100,100,255)
  16.     color3 = Color.new(100,100,255,255)
  17.     @hp.x = 60
  18.     @hp.y = 50
  19.     @hp.z = 10000
  20.     @hp.bitmap.fill_rect(0,0,120,32,color1)
  21.     @sp.x = 450
  22.     @sp.y = 50
  23.     @sp.z = 10000
  24.     @sp.bitmap.fill_rect(0,0,120,32,color1)
  25.     @hpa = 120*enemy.hp/enemy.maxhp
  26.     @spa = 120*enemy.sp/enemy.maxsp
  27.     @hp_a.x = 60
  28.     @hp_a.y = 50
  29.     @hp_a.z = 10000
  30.     @hp_a.bitmap.fill_rect(0,0,@hpa,32,color2)
  31.     @sp_a.x = 450
  32.     @sp_a.y = 50
  33.     @sp_a.z = 10000
  34.     @sp_a.bitmap.fill_rect(0,0,@spa,32,color3)
  35. end

释放(Window_Help中)
RUBY 代码复制
  1. def disposea
  2.     if @hp != nil
  3.       @hp.bitmap.dispose
  4.       @hp.dispose
  5.       @hp_a.bitmap.dispose
  6.       @hp_a.dispose
  7.       @sp.bitmap.dispose
  8.       @sp.dispose
  9.       @sp_a.bitmap.dispose
  10.       @sp_a.dispose
  11.       @hp = nil
  12.       @sp = nil
  13.       @hp_a = nil
  14.       @sp_a = nil
  15.     end
  16.   end

Scene_Battle中每个设置帮助窗口不可见的地方我都调用了disposea,但实际战斗时帮助窗口瞬间消失时血条总要等一段时间才消失,而不是同时消失,怎么让他们同时消失
作者: 恐惧剑刃    时间: 2014-7-18 22:48
本帖最后由 恐惧剑刃 于 2014-7-20 01:34 编辑

放在Window_Help下面
  1. #==============================================================================
  2. # ■ Window_Help
  3. #------------------------------------------------------------------------------
  4. #  特技及物品的说明、角色的状态显示的窗口。
  5. #==============================================================================

  6. class Window_Help < Window_Base
  7.   def disposea
  8.     if @hp != nil
  9.       @hp.bitmap.dispose
  10.       @hp.dispose
  11.       @hp = nil
  12.       @hp_a.bitmap.dispose
  13.       @hp_a.dispose
  14.       @hp_a = nil
  15.       @sp.bitmap.dispose
  16.       @sp.dispose
  17.       @sp = nil
  18.       @sp_a.bitmap.dispose
  19.       @sp_a.dispose
  20.       @sp_a = nil
  21.     end
  22.   end
  23.   def dispose
  24.     super
  25.     disposea
  26.   end
  27.   def visible=(v)
  28.     super
  29.     disposea
  30.   end
  31.   
  32.     def set_enemy(enemy)
  33.     disposea
  34.     self.visible = true
  35.     text = enemy.name
  36.     state_text = make_battler_state_text(enemy, 112, false)
  37.     if state_text != ""
  38.       text += "  " + state_text
  39.     end
  40.     set_text(text, 1)
  41.    
  42.    
  43.    
  44.    
  45.     @hp = nil
  46.     @sp = nil
  47.     @hp_a = nil
  48.     @sp_a = nil
  49.     @hp = Sprite.new
  50.     @hp_a = Sprite.new
  51.     @sp = Sprite.new
  52.     @sp_a = Sprite.new
  53.     @hp.bitmap = Bitmap.new(130,5)
  54.     @hp_a.bitmap= Bitmap.new(130,5)
  55.     @sp.bitmap = Bitmap.new(130,5)
  56.     @sp_a.bitmap = Bitmap.new(130,5)
  57.     color1 = Color.new(150,150,150,255)
  58.     color2 = Color.new(255,100,100,255)
  59.     color3 = Color.new(100,100,255,255)
  60.     @hp.x = 60
  61.     @hp.y = 50
  62.     @hp.z = 10000
  63.     @hp.bitmap.fill_rect(0,0,120,32,color1)
  64.     @sp.x = 450
  65.     @sp.y = 50
  66.     @sp.z = 10000
  67.     @sp.bitmap.fill_rect(0,0,120,32,color1)
  68.     @hpa = 120*enemy.hp/enemy.maxhp
  69.     @spa = 120*enemy.sp/enemy.maxsp
  70.     @hp_a.x = 60
  71.     @hp_a.y = 50
  72.     @hp_a.z = 10000
  73.     @hp_a.bitmap.fill_rect(0,0,@hpa,32,color2)
  74.     @sp_a.x = 450
  75.     @sp_a.y = 50
  76.     @sp_a.z = 10000
  77.     @sp_a.bitmap.fill_rect(0,0,@spa,32,color3)
  78.   end
  79. end
复制代码

作者: RyanBern    时间: 2014-7-18 22:55
搜索Scene_Battle,只有一个地方对@help_window调用了dispose,就是在主循环之后。因此加入了新定义的方法不能解决问题。
原因是你把几个血条显示的东西定义成Sprite,然后跟Window_Help绑定起来了,这样的话,操作的时候就要考虑整体性。因此考虑重新定义下面两个方法(在Window_Help中)
  1. def dispose
  2.   disposea # 这里是你写disposea的内容,照抄上
  3.   super
  4. end
  5. def visible=(val)
  6.   @hp.visible = val if @hp != nil
  7.   @hp_a.visible = val if @hp_a != nil
  8.   @sp.visible = val if @sp != nil
  9.   @sp_a.visible = val if @sp_a != nil
  10.   super(val)
  11. end
复制代码
这里重新定义了dispose方法和visible=方法,考虑到Scene_Battle中场景未结束时@help_window没有被释放,因此visible=方法也要重定义。




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