查看: 2563|回复: 6

[已经解决] 如何在场景中正确调用窗口?已解决

[复制链接]
梦石
0
星屑
470
在线时间
159 小时
注册时间
2013-11-2
回帖
177

开拓者

发表于 2017-10-1 22:31:00 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 飞翔的小鸟3 于 2017-10-2 13:02 编辑

我在场景中调用窗口,但是窗口很快就消失了,查了一下
https://rpg.blue/forum.php?mod=viewthread&tid=126881&highlight=窗口%2B消失

说是要在场景中调(另外一个说用变量调用,大概是a=XX.new,但是a.initialize发生错误,也不知道为什么),然后,我思考了一下,写下如下代码:
我写的窗口:
class Window_shortcut < Window_Command
  def initialize
    super(0,0)
    update_placement
    make_command_list
    music_command_window
    activate
  end
  def update_placement
    self.x = (Graphics.width - width) / 2
    self.y = (Graphics.height * 1.6 - height) / 2
  end
  def make_command_list
    add_command("1", :blood_volume)
    add_command("2", :Bomb_residue)
    add_command("3", :change_weapon)
  end
  def music_command_window
    set_handler(:blood_volume, method(:run_blood_volume))
    set_handler(:Bomb_residue, method(:run_Bomb_residue))
    set_handler(:change_weapon, method(:run_change_weapon))
  end
  def run_blood_volume
  end
  def run_Bomb_residue
  end
  def run_change_weapon
  end
end


我在场景中调用的方法(Scene_Map里面):

def start
    super
    SceneManager.clear
    $game_player.straighten
    $game_map.refresh
    $game_message.visible = false
    create_spriteset
    create_all_windows
    @menu_calling = false
    if $shortcut_window_ok == 1
      Window_shortcut.new
      a = Window_shortcut.new
      a.activate
      $shortcut_window_ok = 0
    end

  end
#========================
  def shortcut_window
    if Kboard.keyboard(0x09)
      if $shortcut_num == nil or $shortcut_num == 0
      $shortcut_num = 1
      $shortcut_window_ok = 1
      SceneManager.call(Scene_Map)
      else
      a = Window_shortcut.new
      a.dispose
      $shortcut_num = 0
      end
    end
  end

  #--------------------------------------------------------------------------
  # ● 更新画面
  #--------------------------------------------------------------------------
  def update
    super
    $game_map.update(true)
    $game_player.update
    $game_timer.update
    @spriteset.update
    update_scene if scene_change_ok?
    shortcut_window
  end

我call出了map的场景,然后调用窗口,还是消失了。
代码中Kboard.keyboard(0x09)指按下tab键

红字是我写的

梦石
0
星屑
664
在线时间
466 小时
注册时间
2009-9-29
回帖
54

开拓者

发表于 2017-10-1 23:15:56 | 显示全部楼层
本帖最后由 plmo43 于 2017-10-2 02:00 编辑

update里没有刷新你自己新建的这个窗口,使用本地变量命名窗口然后在适当的地方update它就好了。脑抽造成误导,涂一下,十分抱歉。

不过如果这个窗口在游戏里经常显示的话,推荐你在Scene_Map一开始创建Window_shortcut,然后使用visible方法隐藏或显示并在适当的地方update它。
[pre lang="ruby"]
def start
    super
    SceneManager.clear
    $game_player.straighten
    $game_map.refresh
    $game_message.visible = false
    create_spriteset
    create_all_windows
    @menu_calling = false
   
    @window_shortcut = Window_shortcut.new
    @window_shortcut.activate
    if $shortcut_window == 1
      @window_shortcut.visible = true
    else
      @window_shortcut.visible = false
    end

  end

  def shortcut_window
    #@window_shortcut.update if @window_shortcut.visible == true
    if Kboard.keyboard(0x09)
      if @window_shortcut.visible == false
        @window_shortcut.visible = true
        $shortcut_window = 1
      else
        @window_shortcut.visible = false
        $shortcut_window = 0
      end
    end
  end

[/pre]


点评

关闭窗口指令dispose报错,close却可以用,这是规定的吗?  发表于 2017-10-2 00:10
你的代码我收藏了  发表于 2017-10-2 00:02
回复

使用道具 举报

梦石
0
星屑
470
在线时间
159 小时
注册时间
2013-11-2
回帖
177

开拓者

 楼主| 发表于 2017-10-2 00:00:23 | 显示全部楼层
plmo43 发表于 2017-10-1 23:15
update里没有刷新你自己新建的这个窗口,使用本地变量命名窗口然后在适当的地方update它就好了。
不过如果 ...

我想了想,真的是没update吗?
我把你哪个update指令注释掉,依旧不消失,然后我想:不对啊。这时,忽然想到我用a做变量调出窗口,a为普通变量,执行完不就消失了吗,然后我用局部变量,原来的代码真的没问题了。
我想得对吗?
然后,你那个visible的办法真的不错,我都不知道有这个。谢谢了
回复

使用道具 举报

梦石
0
星屑
664
在线时间
466 小时
注册时间
2009-9-29
回帖
54

开拓者

发表于 2017-10-2 01:53:05 | 显示全部楼层
本帖最后由 plmo43 于 2017-10-2 02:01 编辑
飞翔的小鸟3 发表于 2017-10-2 00:00
我想了想,真的是没update吗?
我把你哪个update指令注释掉,依旧不消失,然后我想:不对啊。这时,忽然 ...

脑抽了一下,确实不用update,Scene_Base里有针对Window的统一刷新(Scene_Base 92~97),那问题就是本地变量的问题了……造成误区不好意思。

我那段代码22行可以注释掉。如果是在一开始创建的话,不需要刻意去dispose,Scene_Base里也一样有针对Window的统一的dispose方法(Scene_Base 101~106),切换Scene的时候会自动dispose掉。


点评

谢谢了  发表于 2017-10-2 02:13
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部