Project1

标题: 绘制窗口时显示图片让它们关闭时能同时消失【已解决】 [打印本页]

作者: 掘窖人    时间: 2021-10-28 01:04
标题: 绘制窗口时显示图片让它们关闭时能同时消失【已解决】
本帖最后由 掘窖人 于 2021-11-6 23:04 编辑

绘制窗口显示图片,怎样让它们关闭时能同时消失


我弄了一个菜单,这个菜单打开时是同时显示一张图片的,这张图片是个画框,菜单看起来像一幅油画。

打开菜单时,它们同时显示的,但是按取消键关闭菜单的时候,图片会先消失,然后才是窗口消失,看起来很别扭。

有没有大佬知道怎样写可以让窗口和图片关闭时能同时消失?

而不是图片消失菜单才消失。
作者: nie89    时间: 2021-10-28 15:16
你需要插件。Drill_MenuBackground多层菜单背景。
https://rpg.blue/thread-409713-1-3.html这里可以下载。
作者: 掘窖人    时间: 2021-10-28 16:38
nie89 发表于 2021-10-28 15:16
你需要插件。Drill_MenuBackground多层菜单背景。
https://rpg.blue/thread-409713-1-3.html这里可 ...

大佬,但是我用的是VXA
作者: alexncf125    时间: 2021-10-28 17:59
本帖最后由 alexncf125 于 2021-10-28 18:21 编辑

LZ是用事件弄的"菜单&背景图"抑或是用脚本弄的"菜单&背景图"??
方便把相关的资料发上来么,,,
作者: nie89    时间: 2021-10-28 20:25
掘窖人 发表于 2021-10-28 16:38
大佬,但是我用的是VXA

5555没看到,对不住。
作者: 掘窖人    时间: 2021-10-28 22:39
本帖最后由 掘窖人 于 2021-11-8 00:55 编辑
alexncf125 发表于 2021-10-28 17:59
LZ是用事件弄的"菜单&背景图"抑或是用脚本弄的"菜单&背景图"??
方便把相关的资料发上来么,,, ...

用的是脚本写的,要发上来吗?因为我是直接修改默认脚本的,代码会东一条,西一条。。。我也不知道怎么发。。。我把主要部分贴出来给你看

  1. class Xuanxiang < Window_Command  #主菜单左边按键窗口列表

  2.   def initialize
  3.      super(0, 0)
  4.      self.opacity = 255      
  5.      jingling_4     #画框图 精灵方法
  6.   end


  7.   def jingling_4   #画框图 精灵方法,画框精灵图是和菜单一起出现的。  
  8.      $Spp=Sprite.new
  9.      $Spp.bitmap = Cache.system ("ping")  
  10.      $Spp.x = 20
  11.      $Spp.y = 50  
  12.      $Spp.z=201 if $Spp.z!=201
  13.   end

  14.   def make_command_list    #按键列表
  15.      add_command("文件", :wen_jian)   #这些按钮还没写完,就贴了一些。
  16.   end

  17. end


  18. class Sz < Scene_MenuBase  #主菜单呼出场景
  19.   def start
  20.     super
  21.     create_command_window
  22.   end

  23.   def fanhui                 #呼出返回
  24.      if SceneManager.return  #关闭菜单方法
  25.         WenZi::dispose_Ping  #释放画框图片的方法
  26.      end
  27.   end



  28.   #WenZi::dispose_Ping       #方法的定义是这样的,没有把模块部分写进来:



  29.    module WenZi        #WenZi模块,里面有释放画框图片的方法,这个模块是在脚本最上面的,这里只是方便给大佬看定义才写在这里

  30.           def self.dispose_Ping
  31.             $Spp.bitmap.dispose unless $Spp.bitmap==nil
  32.           end

  33.    end


  34.   def create_command_window   
  35.      @com_window = Xuanxiang.new                        #左边选项菜单实例
  36.      @com_window.set_handler(:cancel, method(:fanhui))  #取消键
  37.   end

  38. end
复制代码

作者: alexncf125    时间: 2021-10-29 00:08
本帖最后由 alexncf125 于 2021-10-29 07:39 编辑
掘窖人 发表于 2021-10-28 22:39
用的是脚本写的,要发上来吗?因为我是直接修改默认脚本的,代码会东一条,西一条。。。我也不知道怎么发 ...


看看这样改可以不,,,加了30-33行, 刪了35-39行, 改了47行
  1. class Xuanxiang < Window_Command           #主菜单左边按键窗口列表

  2.   def initialize
  3.      super(0, 0)
  4.      self.opacity = 255      
  5.      jingling_4               #画框图 精灵方法
  6.   end


  7.   def jingling_4             #画框图 精灵方法,画框精灵图是和菜单一起出现的。  
  8.      $Spp=Sprite.new
  9.      $Spp.bitmap = Cache.system ("ping")  
  10.      $Spp.x = 20
  11.      $Spp.y = 50  
  12.      $Spp.z=201 if $Spp.z!=201
  13.   end

  14.   def make_command_list      #按键列表
  15.      add_command("文件", :wen_jian)   #这些按钮还没写完,就贴了一些。
  16.   end

  17. end

  18. class Sz < Scene_MenuBase #主菜单呼出场景
  19.   def start
  20.     super
  21.     create_command_window
  22.   end
  23.   
  24.   def terminate
  25.     super
  26.     $Spp.bitmap.dispose unless $Spp.bitmap==nil
  27.   end
  28.   
  29. #~  def fanhui                       #呼出返回
  30. #~     if SceneManager.return #关闭菜单方法
  31. #~        WenZi::dispose_Ping  #释放画框图片的方法
  32. #~     end
  33. #~  end

  34.   #WenZi::dispose_Ping方法的定义是这样的,没有把模块部分写进来:
  35. #$Spp.bitmap.dispose unless $Spp.bitmap==nil


  36.   def create_command_window   
  37.      @com_window = Xuanxiang.new                                #左边选项菜单实例
  38.      @com_window.set_handler(:cancel, method(:return_scene))  #取消键
  39.   end

  40. end
复制代码

作者: 掘窖人    时间: 2021-10-29 13:06
本帖最后由 掘窖人 于 2021-10-30 15:50 编辑
alexncf125 发表于 2021-10-29 00:08
看看这样改可以不,,,加了30-33行, 刪了35-39行, 改了47行


啊,行了,原来要在主逻辑里释放呀,感谢层主

[FLY]꧁=====【此层废掉】=====꧂[/FLY]



作者: 掘窖人    时间: 2021-10-29 13:11
本帖最后由 掘窖人 于 2021-10-29 13:19 编辑
alexncf125 发表于 2021-10-29 00:08
看看这样改可以不,,,加了30-33行, 刪了35-39行, 改了47行


另外想问一下,VXA这个版本做出来的游戏,窗口化玩时,按出菜单,多按几次取消键就失效了,只能用鼠标点到游戏外面,再点回游戏窗口,取消键才会执行一次,如果要恢复,关闭游戏或重启电脑之类的不太记得了,想问一下这个bug怎么修复?

PS:这个Bug通常是在加速跑步的时候在松开Shift键的瞬间连按菜单键(取消键),就会出现,新开工程也是有的这个BUG。
作者: 掘窖人    时间: 2021-10-29 14:58
alexncf125 发表于 2021-10-29 00:08
看看这样改可以不,,,加了30-33行, 刪了35-39行, 改了47行


不是,虽然这样改能让画框图和主菜单一起消失,不过导致了按了其它按钮后,比如 道具、文件、存档里面的窗口也同时把画框图释放了。

我是希望这个画框图在进入道具、文件、存档也是存在,只是单纯希望画框图在退出菜单的时候消失。
作者: alexncf125    时间: 2021-10-29 23:23
本帖最后由 alexncf125 于 2021-10-29 23:27 编辑
掘窖人 发表于 2021-10-29 14:58
不是,虽然这样改能让画框图和主菜单一起消失,不过导致了按了其它按钮后,比如 道具、文件、存档里面的 ...


退出菜单是会返回地图吧,,,
所以试试在unless那儿加多个分歧, 比如,,,
  def terminate
    super
    if SceneManager.scene.is_a?(Scene_Map)
      $Spp.bitmap.dispose unless $Spp.bitmap==nil
    end
  end


9L的提问,,,我这边测不出bug来,,,新开工程也有问题的话,,,可能是你机子的软硬件的事儿,,,
作者: 掘窖人    时间: 2021-10-29 23:55
alexncf125 发表于 2021-10-29 23:23
退出菜单是会返回地图吧,,,
所以试试在unless那儿加多个分歧, 比如,,,
  def terminate

可以了,释放图片的地方,谢谢啦

另外9L那个bug,不管新开工程还是玩别人发布的游戏都会有的,不过你测不出也没办法了。。。

那我想问问,能不能把按住 shift 加速跑步 改成按一下切换【加速/步行】的模式?
作者: fux2    时间: 2021-10-30 00:24
terminate方法里把$Spp.dispose掉就可以,不要释放它的bitmap,这是缓存里的bitmap
放任不管虽然切换场景时会消失,但同时也会产生不可挽回的内存泄露
作者: 掘窖人    时间: 2021-10-30 12:55
fux2 发表于 2021-10-30 00:24
terminate方法里把$Spp.dispose掉就可以,不要释放它的bitmap,这是缓存里的bitmap
放任不管虽然切换场景时 ...

“放任不管切换场景时消失...” 这句话指的是位图还是精灵?
作者: fux2    时间: 2021-10-30 15:35
掘窖人 发表于 2021-10-30 12:55
“放任不管切换场景时消失...” 这句话指的是位图还是精灵?

指精灵,位图不释放也不会导致泄露
精灵和一次性位图(一般用于做一些描绘)的释放原则是用完就释放
缓存位图直接不管,留在缓存里

作者: 掘窖人    时间: 2021-10-30 15:39
fux2 发表于 2021-10-30 15:35
指精灵,位图不释放也不会导致泄露
精灵和一次性位图(一般用于做一些描绘)的释放原则是用完就释放
缓存 ...

那如果这种不释放的精灵,在游戏关闭以后再打开,还会堆积起来吗?
作者: 掘窖人    时间: 2021-10-31 13:39
fux2 发表于 2021-10-30 15:35
指精灵,位图不释放也不会导致泄露
精灵和一次性位图(一般用于做一些描绘)的释放原则是用完就释放
缓存 ...

原来是这样,一直以为未释放的,会在存档时被保留下来到下次读档继续运行,感谢指教~

最后我想问一个很基础的问题,如果我在初始化方法里,建30个实例变量,或我新建一个三十项的数组,或新建一个三十键的哈希,是不是占用的资源都差不多?




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