Project1

标题: 变量显示脚本和地图显示脚本冲突,哪位能帮解释下原因? [打印本页]

作者: 01012    时间: 2014-1-30 14:27
标题: 变量显示脚本和地图显示脚本冲突,哪位能帮解释下原因?
本帖最后由 01012 于 2014-1-30 16:31 编辑

这两个脚本放一起就会出现错误,哪位能帮解释下原因?
  1. #==========================================================================
  2. # 本脚本来自www.66rpg.com,用于任何游戏请保留此信息。
  3. #==========================================================================

  4. VAR_SWITCH = 26          # 26号开关打开此脚本才工作,关闭则停止运算,并且透明
  5. VAR_REFRESH_SWITCH = 27  # 27号开关控制强制刷新,使用时机:1、把窗口由透明变为不透明(包括第一次使用时),2、游戏中用脚本更改了$var

  6. $var = [] #所有需要显示在地图并且刷新的变量,可在游戏中用脚本更改。格式:[变量编号,x坐标,y坐标]
  7. #==============================================================================
  8. # ■ Window_XY
  9. #------------------------------------------------------------------------------
  10. #  显示坐标的窗口。
  11. #==============================================================================
  12. class Window_Var < Window_Base#注意前面那个window_var是文件名
  13. #--------------------------------------------------------------------------
  14. # ● 初始化窗口
  15. #--------------------------------------------------------------------------
  16. def initialize
  17.   super(-16, -16, 640+32, 480+32)#最后面那个数字是宽要显示多个需要改大,前面一个是长~
  18.   self.contents = Bitmap.new(width - 32, height - 32)
  19.   self.back_opacity = 255  # 这个是背景透明
  20.   self.opacity = 255       # 这个是边框和背景都透明
  21.   self.contents_opacity = 255       # 这个是内容透明
  22.   self.visible = false
  23.   self.z=9999
  24.   @var = $var
  25.   @var_a = []
  26.   for var_draw in $var
  27.     @var_a[var_draw[0]] = $game_variables[var_draw[0]]
  28.   end   
  29.   refresh
  30. end

  31. #--------------------------------------------------------------------------
  32. # ● 刷新
  33. #--------------------------------------------------------------------------
  34. def refresh
  35.   if $game_switches[VAR_SWITCH]
  36.     @var = $var         # 记录现在变量数组结构
  37.     for var_draw in @var
  38.       @var_a[var_draw[0]] = $game_variables[var_draw[0]] # 记录现在的游戏变量
  39.       self.contents.draw_text(var_draw[1],var_draw[2],640,32,@var_a[var_draw[0]].to_s)
  40.     end
  41.   end
  42. end
  43. #--------------------------------------------------------------------------
  44. # ● 判断文字刷新。节约内存用
  45. #--------------------------------------------------------------------------
  46. def judge
  47.   for var_draw in $var
  48.     if @var_a[var_draw[0]] != $game_variables[var_draw[0]] #如果现在记录的变量和游戏变量不同,刷新
  49.       return true
  50.     end
  51.   end
  52.   if $game_switches[VAR_REFRESH_SWITCH]  # 强制刷新的时候,刷新
  53.     $game_switches[VAR_REFRESH_SWITCH] = false
  54.     return true
  55.   end
  56.   return false
  57. end
  58. end

  59. class Scene_Map
  60. alias var_66rpg_main main
  61. def main
  62.   @var_window = Window_Var.new
  63.   @var_window.opacity = 0
  64.   var_66rpg_main
  65.   @var_window.dispose
  66. end
  67. #--------------------------------------------------------------------------
  68. # ● 刷新画面
  69. #--------------------------------------------------------------------------
  70. alias var_66rpg_update update
  71. def update
  72.   var_66rpg_update
  73.   if $game_switches[VAR_SWITCH]
  74.     @var_window.visible = true      
  75.     @var_window.refresh if @var_window.judge
  76.   else
  77.     @var_window.visible = false
  78.   end
  79. end
  80. end
  81. #==========================================================================
  82. # 本脚本来自www.66rpg.com,用于任何游戏请保留此信息。
  83. #==========================================================================
复制代码
  1. # ————————————————————————————————————
  2. # 本脚本来自[url]http://www.66rpg.com/[/url],转载自[url]http://www.phylomortis.com/[/url],转载请保留此信息
  3. # ————————————————————————————————————





  4. #==============================================================================
  5. # ■ Window_MapName
  6. #------------------------------------------------------------------------------
  7. #  显示地图名字的窗口。
  8. #==============================================================================

  9. class Window_MapName < Window_Base
  10.   #--------------------------------------------------------------------------
  11.   # ● 类常量定义
  12.   #--------------------------------------------------------------------------

  13.   # 窗口位置设定
  14.   NAME_X = 210                  # 矩形左上顶点X坐标
  15.   NAME_Y = 180             # 矩形左上顶点Y坐标
  16.   NAME_W = 220          # 矩形宽
  17.   NAME_H = 80           # 矩形高
  18.   
  19.   # 显示时间设置
  20.   SHOW_TIME_0 = 10  # 地图名出现前等待的帧数
  21.   SHOW_TIME_1 = 10  # 地图名从不可见变成可见的帧数
  22.   SHOW_TIME_2 = 34  # 地图名完全可见的帧数
  23.   SHOW_TIME_3 = 16  # 地图名从可见变成不可见的帧数
  24.   
  25.   # 完全可见时的透明度设置
  26.   OPACITY_1 = 0   # 边框
  27.   OPACITY_2 = 0   # 背景
  28.   OPACITY_3 = 255   # 文字
  29.   
  30.   # 地图名字的颜色
  31.   TEXT_COLOR = Color.new(255, 255, 255, 255)
  32.    
  33.   #--------------------------------------------------------------------------
  34.   # ● 初始化状态
  35.   #--------------------------------------------------------------------------
  36.   def initialize
  37.     super(NAME_X , NAME_Y, NAME_W, NAME_H)
  38.     # 初始化窗口透明度
  39.     self.opacity = 0
  40.     self.back_opacity = 0
  41.     self.contents_opacity = 0
  42.     self.contents = Bitmap.new(width - 32, height - 32)
  43.     # 剩余帧数初始化
  44.     @show_time = 0
  45.   end
  46.   #--------------------------------------------------------------------------
  47.   # ● 输出文字
  48.   #--------------------------------------------------------------------------
  49.   def setname

  50.     # 获取地图ID
  51.     newid = $game_map.map_id
  52.     time = SHOW_TIME_1 + SHOW_TIME_2 + SHOW_TIME_3

  53.     # 如果现在的地图的ID不是刚才显示的地图ID则开始显示
  54.     if newid != @id
  55.       @id = newid
  56.       @show_time = SHOW_TIME_0 + SHOW_TIME_1 + SHOW_TIME_2 + SHOW_TIME_3
  57.     # 剩余帧数为0是时,全部窗口透明
  58.     elsif @show_time < 1
  59.       self.opacity = 0
  60.       self.back_opacity = 0
  61.       self.contents_opacity = 0
  62.       return
  63.     end
  64.    
  65.     self.contents.clear
  66.     self.contents.font.color = TEXT_COLOR
  67.     # 描绘地图名

  68.    
  69.     self.contents.font.size = 22
  70.     self.contents.draw_text(4, 0 , width - 40, 32, $data_mapinfos[@id].name.split(/#/)[0], 1)
  71.     self.contents.font.size = 15
  72.     self.contents.draw_text(4, 0 , width - 40, 62, "------------------------", 1)
  73.     self.contents.draw_text(4, 0 , width - 40, 81, $data_mapinfos[@id].name.split(/#/)[1], 1)
  74.    
  75.     # 根本帧数设定窗口透明度
  76.     if @show_time > (SHOW_TIME_2 + SHOW_TIME_3)
  77.       self.opacity = @show_time < time ? (((OPACITY_1 / SHOW_TIME_1) * (time - @show_time)).to_i) : 0
  78.       self.back_opacity = @show_time < time ? (((OPACITY_2 / SHOW_TIME_1 )* (time - @show_time)).to_i) : 0
  79.       self.contents_opacity = @show_time < time ? (((OPACITY_3 / SHOW_TIME_1) * (time - @show_time)).to_i) : 0
  80.     else
  81.       self.opacity = @show_time < (SHOW_TIME_3 / 16 * 14) ? ((OPACITY_1 / SHOW_TIME_3) * @show_time).to_i : OPACITY_1
  82.       self.back_opacity = @show_time < (SHOW_TIME_3 / 16 * 9) ? ((OPACITY_2 / SHOW_TIME_3) * @show_time).to_i : OPACITY_2
  83.       self.contents_opacity = @show_time < SHOW_TIME_3 ? ((OPACITY_3 / SHOW_TIME_3)* @show_time).to_i : OPACITY_3
  84.     end
  85.    
  86.     @show_time -= 1
  87.   end
  88. end

  89. #==============================================================================
  90. # ■ Scene_Map
  91. #------------------------------------------------------------------------------
  92. #  处理地图画面的类。(追加定义)
  93. #==============================================================================

  94. class Scene_Map
  95.   alias smn_main main
  96.   def main
  97.     @mapname = Window_MapName.new
  98.     smn_main
  99.     @mapname.dispose
  100.   end
  101.   
  102.   alias smn_update update
  103.   def update
  104.     @mapname.setname
  105.     smn_update
  106.   end
  107. end

  108. #==============================================================================
  109. # ■ Scene_Title
  110. #------------------------------------------------------------------------------
  111. #  处理标题画面的类。(追加定义)
  112. #==============================================================================

  113. class Scene_Title
  114.   alias smn_main main
  115.   def main
  116.     # 读取地图信息文件
  117.     $data_mapinfos = load_data("Data/MapInfos.rxdata")
  118.     smn_main
  119.   end
  120. end
复制代码

错误.jpg (21.49 KB, 下载次数: 14)

错误.jpg

Project1.zip

203.68 KB, 下载次数: 51


作者: kuerlulu    时间: 2014-1-30 15:57
两个脚本都对Scene_Map的main进行了alias,导致先alias的脚本失效【出错
解决方法,把两个个脚本的alias Scene_Map的main 部分定义到一块。【由于是爪机就不好直接发改好的脚本了
作者: 01012    时间: 2014-1-30 16:30
kuerlulu 发表于 2014-1-30 15:57
两个脚本都对Scene_Map的main进行了alias,导致先alias的脚本失效【出错
解决方法,把两个个脚本的alias Sc ...

嗯,已经解决了。果然是alias的问题,十分感谢!{:2_275:}




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