查看: 2650|回复: 17

[已经解决] 指令窗口怎么释放?我用dispose会报错。已解决

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

开拓者

发表于 2017-10-2 21:54:57 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 飞翔的小鸟3 于 2017-10-3 14:39 编辑

窗口:
  1. class Window_shortcut < Window_Command
  2.   def initialize
  3.     super(0,250)
  4.     make_command_list
  5.     command_window
  6.     activate
  7.     item_max
  8.     process_cursor_move
  9.   end
  10.   
  11.   def make_command_list
  12.     add_command("开启/关闭残血量", :blood_volume)
  13.     add_command("开启/关闭残弹量", :Bomb_residue)
  14.     add_command("更换武器", :change_weapon)
  15.   end
  16.   def command_window
  17.     set_handler(:blood_volume, method(:run_blood_volume))
  18.     set_handler(:Bomb_residue, method(:run_Bomb_residue))
  19.     set_handler(:change_weapon, method(:run_change_weapon))
  20.   end
  21.   def run_blood_volume
  22.   end
  23.   def run_Bomb_residue
  24.   end
  25.   def run_change_weapon
  26.   end
  27.   def item_max
  28.     return 3
  29.   end
  30.   def process_cursor_move
  31.     return unless cursor_movable?
  32.     last_index = @index
  33.     cursor_down (Kboard.keyboard(0x32))  if Kboard.keyboard(0x32)
  34.     cursor_up   (Kboard.keyboard(0x31))    if Kboard.keyboard(0x31)
  35.     Sound.play_cursor if @index != last_index
  36.   end
  37. end
复制代码

在map的update里调用
  1.   def shortcut_window
  2.     if Kboard.keyboard(0x09)
  3.       if $shortcut_num == nil or $shortcut_num == 0
  4.       $shortcut_num = 1
  5.       @window_shortcut = Window_shortcut.new
  6.       @window_shortcut.activate
  7.       @window_shortcut.update
  8.       else
  9.       @window_shortcut.close
  10. #~       @window_shortcut.dispose
  11.       $shortcut_num = 0
  12.       end
  13.     end
  14.   end
复制代码

不知道为啥,不释放窗口,窗口打开过时,如果打开菜单并取消掉就报错
http://pan.baidu.com/s/1pLgGkEf  附上文件
梦石
0
星屑
19426
在线时间
3082 小时
注册时间
2013-1-11
回帖
1207
发表于 2017-10-2 23:39:15 | 显示全部楼层
Scene_Map里面terminate方法后面加上:@window_shortcut = nil;$shortcut_num = 0

点评

我在一楼有工程,你可以去看看  发表于 2017-10-3 14:12
你看看,加了,还是报错  发表于 2017-10-3 14:09
@window_shortcut.dispose,我这样子写下去,会报错,你看看我的工程就知道了(工程里被注释掉了)  发表于 2017-10-3 13:23
直接关掉就dispose啊,或者visiable隐藏也行  发表于 2017-10-3 08:05
是个办法,但是不换场景,直接关掉的话,要等几秒才会消失,没有其他的办法吗?  发表于 2017-10-2 23:56
回复

使用道具 举报

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

开拓者

 楼主| 发表于 2017-10-3 13:27:37 | 显示全部楼层
本帖最后由 飞翔的小鸟3 于 2017-10-3 14:08 编辑
张咚咚 发表于 2017-10-2 23:39
Scene_Map里面terminate方法后面加上:@window_shortcut = nil;$shortcut_num = 0

QQ截图20171003132708.jpg
我刚刚想了想,改成全局变量就可以
更新:出问题了,用全局变量光标是死的。
如果说局部变量代表的窗口已释放或者局部变量被清空的话,为啥我用@a.close可以关闭窗口?然后我用@a.dispose却不可以释放窗口?


[pre lang="ruby"]  def bag_new
    if Kboard.keyboard(0x58)
    if $bag_num == nil or $bag_num == 0
      $bag_num = 1
      @window_newmenu = Window_newmenu.new
      @window_newmenu.activate
      @window_newmenu.update
      $game_switches[42] = true
    else
      if !@window_newmenu.disposed?
      $game_switches[42] = false
      @window_newmenu.dispose
      $bag_num = 0
      end
    end
    end
  end[/pre]

还是报错

点评

释放的地方有两个,一个是Scene_Base自动释放,一个是你手动释放,也就是其中一个释放后,另一个释放则会出错,所以要加判断  发表于 2017-10-3 14:04
检查你@a.dispose之前 @a是不是已经dispose掉了,用 if !@a.disposed? 判断未被释放  发表于 2017-10-3 14:00
在Scene_Base里有instance_variables会遍历所有实例化的变量然后进行更新释放操作  发表于 2017-10-3 13:59
回复

使用道具 举报

梦石
0
星屑
19426
在线时间
3082 小时
注册时间
2013-1-11
回帖
1207
发表于 2017-10-3 14:16:05 | 显示全部楼层
本帖最后由 张咚咚 于 2017-10-3 14:35 编辑
飞翔的小鸟3 发表于 2017-10-3 13:27
我刚刚想了想,改成全局变量就可以
更新:出问题了,用全局变量光标是死的。
如果说局部变量代表的窗口已 ...

忘记了一处地方。。
QQ截图20171003143313.png

点评

看得见我给你的发消息吗?  发表于 2017-10-3 14:43
谢谢,这下没问题了。你们是不是没事一直看脚本编辑器里的代码?不然怎么知道这么多?  发表于 2017-10-3 14:38
忘了该update里面了。。。  发表于 2017-10-3 14:35
大佬,还是报错,其实你说base会释放窗口,我就试着把“释放全部窗口”注释掉了,也是会报错.....  发表于 2017-10-3 14:29
不对,这是rpgav的知识  发表于 2017-10-3 14:24
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部