Project1

标题: 对话框不影响行动脚本的BUG [打印本页]

作者: 幻耶    时间: 2009-12-9 10:36
标题: 对话框不影响行动脚本的BUG
本帖最后由 幻耶 于 2009-12-9 10:57 编辑

下面这段脚本的功能是让事件在走动的时候也能说话,也就是让对话框不影响角色和事件的行动,通过事件用脚本 popMessage(50,"对话!") 来调用,但是发现调出对话框但是对话框还没消失的时候如果角色场所移动到了别的地图就如下图出错了,有什么方法解决么?
  1. class Window_PopMessage < Window_Base
  2.   def initialize(id, frames, str)
  3.     @id = id
  4.     @frames = frames
  5.     @pop_fade = 0
  6.     strs = str.split(/$/m)
  7.     temp = Bitmap.new(1, 1)
  8.     temp.font.size = 16
  9.     max_w = 0
  10.     rects = []
  11.     for i in 0...strs.length
  12.       rects.push(temp.text_size(strs[i]))      
  13.       width = rects[i].width
  14.       if width > max_w
  15.         max_w = width
  16.       end
  17.     end
  18.     temp.dispose
  19.     max_h = strs.length * 20
  20.     super($game_map.events[@id].screen_x - ((max_w + 32) >> 1),
  21.       $game_map.events[@id].screen_y - max_h - 96,
  22.       max_w + 32, max_h + 32)
  23.     self.contents = Bitmap.new(max_w, max_h)
  24.     self.contents.font.size = 16
  25.     self.z = 1000
  26.     self.opacity = 0
  27.     self.contents_opacity = 0
  28.     for i in 0...strs.length
  29.       rects[i].y = i * 20
  30.       self.contents.draw_text(rects[i], strs[i])
  31.     end
  32.   end
  33.   
  34.   def update
  35.     self.x = $game_map.events[@id].screen_x - (self.width >> 1)
  36.     self.y = $game_map.events[@id].screen_y - self.height - 64
  37.     if @pop_fade == 0
  38.       self.opacity += 10
  39.       self.contents_opacity += 10
  40.       @pop_fade = 1 if self.contents_opacity >= 255
  41.     elsif @pop_fade == 2
  42.       self.opacity -= 10
  43.       self.contents_opacity -= 10
  44.       dispose if self.contents_opacity <= 0
  45.     else
  46.       @frames -= 1
  47.       @pop_fade = 2 if @frames <= 0
  48.     end
  49.   end
  50. end

  51. class Scene_Map
  52.   attr_accessor :pop_windows
  53.   alias main_original main unless method_defined? :main_original
  54.   def main
  55.     @pop_windows = []
  56.     main_original
  57.     for i in @pop_windows      
  58.       i.dispose unless i.disposed?
  59.     end
  60.   end

  61.   alias update_original update unless method_defined? :update_original
  62.   def update
  63.     i = 0
  64.     while i < @pop_windows.length
  65.       if @pop_windows[i].disposed?
  66.         @pop_windows.delete_at(i)
  67.       else
  68.         @pop_windows[i].update
  69.       end
  70.       i += 1
  71.     end
  72.     update_original
  73.   end
  74. end

  75. class Interpreter
  76.   def popMessage(frames, str)
  77.     if !$scene.is_a?(Scene_Map)
  78.       return
  79.     end
  80.     $scene.pop_windows.push(Window_PopMessage.new(@event_id, frames, str))
  81.   end
  82. end
复制代码

00.jpg (9.45 KB, 下载次数: 6)

00.jpg

作者: 精灵使者    时间: 2009-12-9 11:07
原因很简单。
移动地图以后,此脚本找不到事件,肯定找不到事件的XY坐标。
建议对此做一下防御
作者: 幻耶    时间: 2009-12-9 11:17
那应该加一个什么分歧判断呢?if 场景转换了?
作者: 幻耶    时间: 2009-12-10 09:35
顶~




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