Project1

标题: 在什么情况下Window类的visible属性更改会无效? [打印本页]

作者: Mono_kyrin    时间: 2018-10-29 11:14
标题: 在什么情况下Window类的visible属性更改会无效?
本帖最后由 Mono_kyrin 于 2018-10-29 11:16 编辑

比如一个用来显示战斗状态窗口的Window_BattleStatus类的构造函数大概是长这样的:
RUBY 代码复制
  1. class Window_BattleStatus < Window_Base
  2.   #--------------------------------------------------------------------------
  3.   # ● 初始化对像
  4.   #--------------------------------------------------------------------------
  5.   def initialize
  6.     super(0, 320, 640, 160)
  7.     self.contents = Bitmap.new(width - 32, height - 32)
  8.     #........................................................................
  9.     self.windowskin = nil
  10.     @sta_back = []
  11.     @sta_output = []
  12.     @states_icons = []
  13.     @state_icon_p = []
  14.     @hp_bitmap = loadbitmap("Graphics/CP/hp.png")#// HP條
  15.     @mp_bitmap = loadbitmap("Graphics/CP/mp.png")#// MP條
  16.     @ap_bitmap = loadbitmap("Graphics/CP/AP.png")#// AP條
  17.     for i in 0...$game_party.actors.size
  18.       actor = $game_party.actors[i]
  19.       #//Background
  20.       @sta_back[i] = Sprite.new
  21.       @sta_back[i].bitmap = loadbitmap("Graphics/CP/" +actor.name+"_平时.png")
  22.       @sta_back[i].x = 2 + i * 155
  23.       @sta_back[i].y = 382
  24.       @sta_back[i].z = self.z + 1
  25.       #//State
  26.       @states_icons[i] = Sprite.new
  27.       @state_icon_p[i] = 0
  28.       @states_icons[i].x = i * 155 + 85
  29.       @states_icons[i].y = 400
  30.       @states_icons[i].z = 999
  31.       st = $game_party.actors[i].states[@state_icon_p[i]]
  32.       unless st.nil?
  33.         path = "Graphics/States/#{st}.png"
  34.         @states_icons[i].bitmap = loadbitmap(path)
  35.       end
  36.       #//Bars
  37.       @sta_output[i] = Sprite.new
  38.       @sta_output[i].bitmap = Bitmap.new(150, 78)
  39.       @sta_output[i].x = 2 + i * 155
  40.       @sta_output[i].y = 480 - 85
  41.       @sta_output[i].z = self.z + 2
  42.       @sta_output[i].bitmap.font.name = "黑体"
  43.     end
  44.     @level_up_flags = [false, false, false, false]
  45.     #........................................................................
  46.     refresh
  47.   end

然后调用@status_window = Window_BattleStatus.new 方法以后,调整@status_window.visible = false, 这个窗口并没有消失是什么情况……
作者: 灯笼菜刀王    时间: 2018-10-29 12:00
本帖最后由 灯笼菜刀王 于 2018-10-29 12:04 编辑

因为你隐藏的是窗口, 没隐藏那些精灵啊.........

你这样写, 图片是独立的精灵实例(Sprite.new)哦, 它和你的Window_BattleStatus.new 这个实例没关系, 你隐藏窗口当然对它们没影响, 要隐藏它们就要一个一个去  精灵实例.visible = false

要图片 文字什么的 在窗口里显示, 要把它们放到窗口自己的矩形(contents)里,

栗子:

图片:  self.contents.blt(x, y, 图片矩形, Rect.new(x, y,width,height),opacity)

文字: self.contents.draw_text(x,y,width,height, 显示的字符串, 对齐0左 1中 2右)


作者: 百里_飞柳    时间: 2018-10-29 15:15
看到标题的第一眼,还以为是询问
窗口的opacity=0时,visible=true无效(不这太傻了)

你也可以重定义窗口的visible=方法,在里面加上对你新增的全部精灵的visible的设置
原理同楼上,强行让精灵和窗口关联起来
alias eagle_visible visible=
def visible=(f)
  eagle_visible(f)
  sprite.visible = f
end




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