查看: 2245|回复: 3

[已经解决] 在什么情况下Window类的visible属性更改会无效?

[复制链接]
梦石
0
星屑
3670
在线时间
357 小时
注册时间
2018-9-4
回帖
261
发表于 2018-10-29 11:14:31 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 Mono_kyrin 于 2018-10-29 11:16 编辑

比如一个用来显示战斗状态窗口的Window_BattleStatus类的构造函数大概是长这样的:
[pre lang="ruby"]class Window_BattleStatus < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    super(0, 320, 640, 160)
    self.contents = Bitmap.new(width - 32, height - 32)
    #........................................................................
    self.windowskin = nil
    @sta_back = []
    @sta_output = []
    @states_icons = []
    @state_icon_p = []
    @hp_bitmap = loadbitmap("Graphics/CP/hp.png")#// HP條
    @mp_bitmap = loadbitmap("Graphics/CP/mp.png")#// MP條
    @ap_bitmap = loadbitmap("Graphics/CP/AP.png")#// AP條
    for i in 0...$game_party.actors.size
      actor = $game_party.actors
      #//Background
      @sta_back = Sprite.new
      @sta_back.bitmap = loadbitmap("Graphics/CP/" +actor.name+"_平时.png")
      @sta_back.x = 2 + i * 155
      @sta_back.y = 382
      @sta_back.z = self.z + 1
      #//State
      @states_icons = Sprite.new
      @state_icon_p = 0
      @states_icons.x = i * 155 + 85
      @states_icons.y = 400
      @states_icons.z = 999
      st = $game_party.actors.states[@state_icon_p]
      unless st.nil?
        path = "Graphics/States/#{st}.png"
        @states_icons.bitmap = loadbitmap(path)
      end
      #//Bars
      @sta_output = Sprite.new
      @sta_output.bitmap = Bitmap.new(150, 78)
      @sta_output.x = 2 + i * 155
      @sta_output.y = 480 - 85
      @sta_output.z = self.z + 2
      @sta_output.bitmap.font.name = "黑体"
    end
    @level_up_flags = [false, false, false, false]
    #........................................................................
    refresh
  end[/pre]
然后调用@status_window = Window_BattleStatus.new 方法以后,调整@status_window.visible = false, 这个窗口并没有消失是什么情况……
梦石
0
星屑
42235
在线时间
6017 小时
注册时间
2006-11-10
回帖
6966
发表于 2018-10-29 12:00:27 | 显示全部楼层
本帖最后由 灯笼菜刀王 于 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右)

点评

成功了,谢谢大佬www  发表于 2018-10-29 13:02

评分

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

查看全部评分

回复

使用道具 举报

老鹰

梦石
40
星屑
37812
在线时间
7091 小时
注册时间
2012-5-26
回帖
3297

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

发表于 2018-10-29 15:15:09 | 显示全部楼层
看到标题的第一眼,还以为是询问
窗口的opacity=0时,visible=true无效(不这太傻了)

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

评分

参与人数 1星屑 +50 收起 理由
RyanBern + 50 我很赞同

查看全部评分

回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部