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

Project1

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

[有事请教] 主角和事件接触的时候就会弹出一个窗口显示地名

[复制链接]

Lv1.梦旅人

梦石
0
星屑
135
在线时间
13 小时
注册时间
2024-7-19
帖子
3
跳转到指定楼层
1
发表于 2024-7-21 19:58:17 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我画的地图很大,有很多小房间,我想在进入这些房间时接触一个事件然后就能显示这个小房间的名字
  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
复制代码

Lv5.捕梦者

梦石
0
星屑
38717
在线时间
5698 小时
注册时间
2006-11-10
帖子
6608
2
发表于 2024-7-21 22:04:29 | 只看该作者
原因是没有指针,被内存自动刷掉了, 给你稍微修改了下, 把脚本塞到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
复制代码

评分

参与人数 1+1 收起 理由
yangonever + 1 认可答案

查看全部评分

回复 支持 1 反对 0

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
135
在线时间
13 小时
注册时间
2024-7-19
帖子
3
3
 楼主| 发表于 2024-7-21 22:07:07 | 只看该作者
灯笼菜刀王 发表于 2024-7-21 22:04
原因是没有指针,被内存自动刷掉了, 给你稍微修改了下, 把脚本塞到main前面

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

谢谢大佬,我研究一下
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-8 10:36

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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