Project1

标题: 主角和事件接触的时候就会弹出一个窗口显示地名 [打印本页]

作者: yangonever    时间: 2024-7-21 19:58
标题: 主角和事件接触的时候就会弹出一个窗口显示地名
我画的地图很大,有很多小房间,我想在进入这些房间时接触一个事件然后就能显示这个小房间的名字
  1. $little_map_name = "办公室"
  2. Window_Littlemap.new.newtest
复制代码

如下所示,第一次调用窗口是一闪而过,第二次就是一个较长的时间后自动消失,而且人物可以自由移动。如果两个调用事件靠得很近且设定的全局变量内容不同就会重叠(办公室和休息室)
我尝试加释放窗口就会报错
RGSSError disposed Window
为了解决第一次调动一闪而过的问题我在refresh方法后加上了停留和淡出的代码
  1. 80.times {Graphics.update}
  2.     40.times do
  3.       self.back_opacity -= 6
  4.     self.opacity -= 6
  5.     self.contents_opacity -= 6
  6.     Graphics.update
  7.     end
复制代码

加上之后停留淡出的效果连续执行了两次,而且人物也无法移动,在地图上乱跑的npc也动不了
本来想搜索一下有没有类似的问题,发现自己没有搜索的权限。只能码字求助论坛的大佬们了。
怎么样才能解决窗口重叠和一闪而过的问题
  1. class Window_Littlemap < Window_Base
  2.   #设置名字
  3.   def little_map(name = "")
  4.     $little_map_name = name
  5.   end
  6.   #初始化
  7.   def initialize
  8.     super(0, 0, 160, 64)
  9.     self.contents = Bitmap.new(width - 32, height - 32 )
  10.     self.back_opacity = 240
  11.     self.opacity = 240
  12.     self.contents_opacity = 240
  13.     self.visible = true
  14.     refresh
  15.   end
  16.   #刷新
  17.   def refresh
  18.     name = $little_map_name
  19.     self.contents.clear
  20.     self.contents.font.color = system_color
  21.     self.contents.draw_text(0, 0, width - 32, 32, name ,1)
  22.   end
  23.   #调用
  24.   def newtest
  25.     @little_map_window = Window_Littlemap.new
  26.     @little_map_window.x = 0
  27.     @little_map_window.y = 0
  28.   end
  29. end
复制代码


作者: 灯笼菜刀王    时间: 2024-7-21 22:04
原因是没有指针,被内存自动刷掉了, 给你稍微修改了下, 把脚本塞到main前面

使用方法,   事件脚本调用:   地名"休息室"     , 要关闭则调用 地名(nil)

  1. class Window_Littlemap < Window_Base
  2.   #初始化
  3.   def initialize
  4.     super(0, 0, 160, 64)
  5.     self.contents = Bitmap.new(width - 32, height - 32 )
  6.     self.back_opacity = 240
  7.     self.opacity = 240
  8.     self.contents_opacity = 240
  9.     refresh
  10.   end
  11.   #刷新
  12.   def refresh
  13.     return if !(self.visible = ((a=$game_system.little_map_name) != nil))
  14.     self.contents.clear
  15.     self.contents.font.color = system_color
  16.     self.contents.draw_text(0, 0, width - 32, 32, a ,1)
  17.   end
  18. end

  19. class Game_System
  20.   attr_accessor :little_map_name
  21. end

  22. class Scene_Map
  23.   attr_reader :littemap
  24.   alias old_main main
  25.   def main
  26.     @littemap = Window_Littlemap.new
  27.     old_main
  28.     @littemap.dispose
  29.   end
  30. end

  31. class Interpreter
  32.   def 地名(name)
  33.     $game_system.little_map_name = name
  34.     $scene.littemap.refresh if $scene.is_a?(Scene_Map)
  35.   end
  36. end
复制代码

作者: yangonever    时间: 2024-7-21 22:07
灯笼菜刀王 发表于 2024-7-21 22:04
原因是没有指针,被内存自动刷掉了, 给你稍微修改了下, 把脚本塞到main前面

使用方法,   事件脚本调用:    ...

谢谢大佬,我研究一下




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