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

Project1

 找回密码
 注册会员
搜索
查看: 2157|回复: 6
打印 上一主题 下一主题

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

[复制链接]

Lv2.观梦者

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

开拓者

跳转到指定楼层
1
发表于 2017-10-1 22:31:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 飞翔的小鸟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键

红字是我写的

Lv2.观梦者

梦石
0
星屑
634
在线时间
463 小时
注册时间
2009-9-29
帖子
67

开拓者

4
发表于 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
回复 支持 反对

使用道具 举报

Lv2.观梦者

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

开拓者

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

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

使用道具 举报

Lv2.观梦者

梦石
0
星屑
634
在线时间
463 小时
注册时间
2009-9-29
帖子
67

开拓者

2
发表于 2017-10-1 23:15:56 | 只看该作者
本帖最后由 plmo43 于 2017-10-2 02:00 编辑

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

不过如果这个窗口在游戏里经常显示的话,推荐你在Scene_Map一开始创建Window_shortcut,然后使用visible方法隐藏或显示并在适当的地方update它。
RUBY 代码复制
  1. def start
  2.     super
  3.     SceneManager.clear
  4.     $game_player.straighten
  5.     $game_map.refresh
  6.     $game_message.visible = false
  7.     create_spriteset
  8.     create_all_windows
  9.     @menu_calling = false
  10.  
  11.     @window_shortcut = Window_shortcut.new
  12.     @window_shortcut.activate
  13.     if $shortcut_window == 1
  14.       @window_shortcut.visible = true
  15.     else
  16.       @window_shortcut.visible = false
  17.     end
  18.  
  19.   end
  20.  
  21.   def shortcut_window
  22.     #@window_shortcut.update if @window_shortcut.visible == true
  23.     if Kboard.keyboard(0x09)
  24.       if @window_shortcut.visible == false
  25.         @window_shortcut.visible = true
  26.         $shortcut_window = 1
  27.       else
  28.         @window_shortcut.visible = false
  29.         $shortcut_window = 0
  30.       end
  31.     end
  32.   end



点评

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

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-17 16:19

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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