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

Project1

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

[已经解决] 对于沉影不器的“快捷显示系统”的显示清除BUG求解

[复制链接]

Lv1.梦旅人

沉睡的八宝粥 

梦石
0
星屑
64
在线时间
832 小时
注册时间
2011-4-22
帖子
2996

短篇七萝莉正太组季军

跳转到指定楼层
1
发表于 2012-2-17 20:42:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
1星屑
第一次找到了能在地图上显示变量和文字的脚本,感觉很好,但是BUG
还是太大了... 这是脚本:
  1. #==============================================================================
  2. # 快捷显示系统 by 沉影不器
  3. #
  4. #   在地图上用事件脚本指定显示内容,并以编号管理
  5. #------------------------------------------------------------------------------
  6. # 可用功能:
  7. # set_us(显示内容, 编号#可省略, 横坐标#可省略, 纵坐标#可省略)
  8. #   功能: 设定一个显示版,如果编号相同,表示重新设定
  9. #   参数[显示内容]规定: 参数为数字时,表示该数字对应的系统变量
  10. #                       此时显示内容随系统变量自动更新
  11. #                         如显示1号变量: set_us(1)
  12. #                       参数为文本时,直接显示文本内容
  13. #                         如直接显示数字10: set_us("10")
  14. #   参数[编号]的规定:   编号从0开始,省略参数时,表示在缓存最后添加一个新的显示板
  15. #                         如当前最后一个显示板编号为10,则新建一个编号11的显示板
  16. #
  17. # move_us(编号, 横坐标, 纵坐标)
  18. #   功能: 移动指定编号的显示版
  19. #
  20. # show_us(编号#可省略)
  21. #   功能: 显示指定编号的显示板
  22. #   省略编号表示全部显示
  23. #
  24. # hide_us(编号#可省略)
  25. #   功能: 隐藏指定编号的显示板
  26. #   省略编号表示全部隐藏
  27. #
  28. # clear_us(编号#可省略)
  29. #   功能: 清除指定编号的显示板
  30. #   省略编号表示全部清除
  31. #
  32. # us_font(编号, 类型, 新属性值)
  33. #   功能: 为指定编号的显示板设定显示类型
  34. #   类型列表 0:透明度 1:字色 2:字号 3:粗体 4:斜体 5:阴影
  35. #     如修改0号显示板的字色为红色: us_font(0,1,Color.new(255,0,0))
  36. #     如修改0号显示板的字体为斜体: us_font(0,4,true)
  37. #
  38. #     字色的特殊输入: 允许使用颜色对象如 us_font(0,1,Color.new(255,0,0))#表示红色
  39. #                     直接输入整数表示启用vx皮肤素材上的颜色格子,如 us_font(0,1,5)#表示启用Window皮肤第6格颜色
  40. #                     允许使用颜色代码,格式: "#FF00D5",如 us_font(0,1,"#FF0000")#表示红色
  41. #
  42. # 参数设定在脚本第45~52行
  43. #==============================================================================
  44. module UserSprite
  45.   DefX       = 0                      # 默认横坐标
  46.   DefY       = 0                      # 默认纵坐标
  47.   DefOpacity = 255                    # 默认透明度
  48.   DefColor   = Color.new(255,255,255) # 默认字色
  49.   DefSize    = 20                     # 默认字号
  50.   DefBold    = false                  # 默认粗体情况
  51.   DefItalic  = false                  # 默认斜体情况
  52.   DefShadow  = true                   # 默认阴影情况
  53. end

  54. #==============================================================================
  55. # ■ Game_Interpreter
  56. #==============================================================================
  57. class Game_Interpreter
  58.   include UserSprite
  59.   #--------------------------------------------------------------------------
  60.   # 设定用户精灵
  61.   #--------------------------------------------------------------------------
  62.   def set_us(obj, id = nil, x = DefX, y = DefY)
  63.     i = id.nil? ? user_sprites.size : id
  64.     user_sprites[i].dispose unless user_sprites[i].nil? or user_sprites[i].disposed?
  65.     user_sprites[i] = Sprite_User_Sprite.new(obj)
  66.     move_us(i, x, y)
  67.   end
  68.   #--------------------------------------------------------------------------
  69.   # 移动用户精灵
  70.   #--------------------------------------------------------------------------
  71.   def move_us(id, x, y)
  72.     user_sprites[id].pos = [x,y]
  73.   end
  74.   #--------------------------------------------------------------------------
  75.   # 显示用户精灵
  76.   #--------------------------------------------------------------------------
  77.   def show_us(id = nil)
  78.     if id == nil
  79.       for sprite in user_sprites
  80.         sprite.visible = true
  81.       end
  82.     else
  83.       user_sprites[id].visible = true if user_sprites[id] != nil
  84.     end
  85.   end
  86.   #--------------------------------------------------------------------------
  87.   # 隐藏用户精灵
  88.   #--------------------------------------------------------------------------
  89.   def hide_us(id = nil)
  90.     if id == nil
  91.       for sprite in user_sprites
  92.         sprite.visible = false
  93.       end
  94.     else
  95.       user_sprites[id].visible = false if user_sprites[id] != nil
  96.     end
  97.   end
  98.   #--------------------------------------------------------------------------
  99.   # 清除用户精灵
  100.   #--------------------------------------------------------------------------
  101.   def clear_us(id = nil)
  102.     if id == nil
  103.       for sprite in user_sprites
  104.         sprite.dispose
  105.       end
  106.     else
  107.       user_sprites[id].dispose if user_sprites[id] != nil
  108.     end
  109.   end
  110.   #--------------------------------------------------------------------------
  111.   # ● 获取文字颜色色
  112.   #     n : 文字颜色编号 (0~31)
  113.   #--------------------------------------------------------------------------
  114.   def text_color(n)
  115.     x = 64 + (n % 8) * 8
  116.     y = 96 + (n / 8) * 8
  117.     return windowskin.get_pixel(x, y)
  118.   end
  119.   #--------------------------------------------------------------------------
  120.   # 设定用户精灵字体
  121.   #--------------------------------------------------------------------------
  122.   def us_font(id, kind, arg)
  123.     case kind
  124.     when 0 ## 透明度
  125.       user_sprites[id].opacity = arg
  126.     when 1 ## 字色
  127.       case arg
  128.       when Color
  129.         c = arg
  130.       when Integer
  131.         x = 64 + (arg % 8) * 8
  132.         y = 96 + (arg / 8) * 8
  133.         c = Cache.system("Window").get_pixel(x, y)
  134.       when String
  135.         c = Color.new(arg[1,2].to_i(16), arg[3,2].to_i(16), arg[5,2].to_i(16))
  136.       end
  137.       user_sprites[id].color = c
  138.     when 2 ## 字号
  139.       user_sprites[id].size = arg
  140.     when 3 ## 粗体
  141.       user_sprites[id].bold = arg
  142.     when 4 ## 斜体
  143.       user_sprites[id].italic = arg
  144.     when 5 ## 阴影
  145.       user_sprites[id].shadow = arg
  146.     end
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # 提取用户精灵
  150.   #--------------------------------------------------------------------------
  151.   def user_sprites
  152.     return nil unless $scene.is_a? Scene_Map
  153.     return $user_sprites
  154.   end
  155. end

  156. #==============================================================================
  157. # Spriteset_Map
  158. #==============================================================================
  159. class Spriteset_Map
  160.   attr_accessor :user_sprites
  161.   #--------------------------------------------------------------------------
  162.   # ● 初始化对象
  163.   #--------------------------------------------------------------------------
  164.   def initialize
  165.     create_viewports
  166.     create_tilemap
  167.     create_parallax
  168.     create_characters
  169.     create_shadow
  170.     create_weather
  171.     create_pictures
  172.     create_timer
  173.     ##
  174.     create_user_sprites
  175.     update
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # 生成用户精灵
  179.   #--------------------------------------------------------------------------
  180.   def create_user_sprites
  181.     $user_sprites ||= []
  182.     for sprite in $user_sprites
  183.       next if sprite.nil?
  184.       sprite.visible = true
  185.     end
  186.   end
  187.   #--------------------------------------------------------------------------
  188.   # ● 释放
  189.   #--------------------------------------------------------------------------
  190.   def dispose
  191.     ##
  192.     dispose_user_sprites
  193.     dispose_tilemap
  194.     dispose_parallax
  195.     dispose_characters
  196.     dispose_shadow
  197.     dispose_weather
  198.     dispose_pictures
  199.     dispose_timer
  200.     dispose_viewports
  201.   end
  202.   #--------------------------------------------------------------------------
  203.   # 释放用户精灵
  204.   #--------------------------------------------------------------------------
  205.   def dispose_user_sprites
  206.     for sprite in $user_sprites
  207.       next if sprite.nil?
  208.       sprite.visible = false
  209.       ##sprite.dispose
  210.     end
  211.   end
  212.   #--------------------------------------------------------------------------
  213.   # ● 刷新画面
  214.   #--------------------------------------------------------------------------
  215.   def update
  216.     update_user_sprites
  217.     update_tilemap
  218.     update_parallax
  219.     update_characters
  220.     update_shadow
  221.     update_weather
  222.     update_pictures
  223.     update_timer
  224.     update_viewports
  225.   end
  226.   #--------------------------------------------------------------------------
  227.   # 刷新用户精灵
  228.   #--------------------------------------------------------------------------
  229.   def update_user_sprites
  230.     for sprite in $user_sprites
  231.       next if sprite.nil?
  232.       sprite.update
  233.     end
  234.   end
  235. end

  236. #==============================================================================
  237. # Sprite_User_Sprite
  238. #==============================================================================
  239. class Sprite_User_Sprite < Sprite
  240.   include UserSprite
  241.   #--------------------------------------------------------------------------
  242.   # 初始化
  243.   #--------------------------------------------------------------------------
  244.   def initialize(obj = nil)
  245.     super()
  246.     ###self.bitmap = Bitmap.new(Graphics.width, Graphics.height)
  247.     self.bitmap = Bitmap.new(1,1)
  248.     self.x = 0; self.y = 0; self.z = 9999
  249.     @obj = obj
  250.     self.opacity = DefOpacity
  251.     self.bitmap.font.color = DefColor
  252.     self.bitmap.font.size = DefSize
  253.     self.bitmap.font.bold = DefBold
  254.     self.bitmap.font.italic = DefItalic
  255.     self.bitmap.font.shadow = DefShadow
  256.     update
  257.   end
  258.   #--------------------------------------------------------------------------
  259.   # 释放
  260.   #--------------------------------------------------------------------------
  261.   def dispose
  262.     if self.bitmap != nil
  263.       self.bitmap.dispose
  264.     end
  265.     super
  266.   end
  267.   #--------------------------------------------------------------------------
  268.   # 更新
  269.   #--------------------------------------------------------------------------
  270.   def update
  271.     super
  272.     return unless self.visible
  273.     return unless @obj
  274.     case @obj
  275.     when String
  276.       if @obj != @objc
  277.         @objc = @obj.clone
  278.         refresh
  279.       end
  280.     when Integer
  281.       if $game_variables[@obj] != @objc
  282.         @objc = $game_variables[@obj]
  283.         refresh
  284.       end
  285.     end
  286.   end
  287.   #--------------------------------------------------------------------------
  288.   # 设定坐标
  289.   #--------------------------------------------------------------------------
  290.   def pos=(*arg)
  291.     temp = *arg
  292.     self.x = temp[0]
  293.     self.y = temp[1]
  294.   end
  295.   #--------------------------------------------------------------------------
  296.   # 设定透明度
  297.   #--------------------------------------------------------------------------
  298.   def opacity=(o)
  299.     super(o)
  300.     refresh
  301.   end
  302.   #--------------------------------------------------------------------------
  303.   # 设定字色
  304.   #--------------------------------------------------------------------------
  305.   def color=(c)
  306.     self.bitmap.font.color = c
  307.     refresh
  308.   end
  309.   #--------------------------------------------------------------------------
  310.   # 设定字号
  311.   #--------------------------------------------------------------------------
  312.   def size=(z)
  313.     self.bitmap.font.size = z
  314.     refresh
  315.   end
  316.   #--------------------------------------------------------------------------
  317.   # 设定粗体
  318.   #--------------------------------------------------------------------------
  319.   def bold=(b)
  320.     self.bitmap.font.bold = b
  321.     refresh
  322.   end
  323.   #--------------------------------------------------------------------------
  324.   # 设定斜体
  325.   #--------------------------------------------------------------------------
  326.   def italic=(i)
  327.     self.bitmap.font.italic = i
  328.     refresh
  329.   end
  330.   #--------------------------------------------------------------------------
  331.   # 设定阴影
  332.   #--------------------------------------------------------------------------
  333.   def shadow=(s)
  334.     self.bitmap.font.shadow = s
  335.     refresh
  336.   end
  337.   #--------------------------------------------------------------------------
  338.   # 重绘
  339.   #--------------------------------------------------------------------------
  340.   def refresh
  341.     if @objc.to_s.size > 0
  342.       rect = self.bitmap.text_size(@objc.to_s)
  343.       font = self.bitmap.font.clone
  344.       self.bitmap.dispose
  345.       self.bitmap = Bitmap.new(rect.width, rect.height)
  346.       self.bitmap.font = font
  347.       self.bitmap.draw_text(rect, @objc.to_s)
  348.     else
  349.       self.bitmap.clear
  350.     end
  351.   end
  352. end
复制代码
在我用set_us(1, 1, 250, 200)显示1号显示板的变量后再用clear_us(1)清除其内容会出现错误。
这是图片:
这是错误范例: Project1.rar (240.65 KB, 下载次数: 93)
(人家是新手,才上初一,高手勿喷...)

最佳答案

查看完整内容

在210行那边也加上那样的两句 和刚刚的结构一样的

点评

我不是高手可是你最后一句话让我的吐槽欲望爆棚了。  发表于 2012-2-19 13:27

Lv6.析梦学徒

Fuzzy Ginkgo
Taciturn Knight

梦石
0
星屑
60575
在线时间
1933 小时
注册时间
2010-6-26
帖子
1605

烫烫烫开拓者

2
发表于 2012-2-17 20:42:20 | 只看该作者
在210行那边也加上那样的两句 和刚刚的结构一样的
我的言论只代表我个人的观点,不代表雇主及/或任何第三方的立场。
Opinions expressed are solely my own and do not express the views or opinions of my employer and/or any third parties.
捐赠 | GitHub
回复

使用道具 举报

Lv6.析梦学徒

Fuzzy Ginkgo
Taciturn Knight

梦石
0
星屑
60575
在线时间
1933 小时
注册时间
2010-6-26
帖子
1605

烫烫烫开拓者

3
发表于 2012-2-17 20:54:02 | 只看该作者
231行那里改成这样 即在234下面加上一句next if sprite.disposed?

  1. def update_user_sprites
  2. for sprite in $user_sprite
  3. next if sprite.nil?

  4. next if sprite.disposed?

  5. sprite.update

  6. end

  7. end

  8. end
复制代码
我的言论只代表我个人的观点,不代表雇主及/或任何第三方的立场。
Opinions expressed are solely my own and do not express the views or opinions of my employer and/or any third parties.
捐赠 | GitHub
回复

使用道具 举报

Lv1.梦旅人

沉睡的八宝粥 

梦石
0
星屑
64
在线时间
832 小时
注册时间
2011-4-22
帖子
2996

短篇七萝莉正太组季军

4
 楼主| 发表于 2012-2-17 21:03:13 | 只看该作者
orzfly 发表于 2012-2-17 20:54
231行那里改成这样 即在234下面加上一句next if sprite.disposed?

还是不行呃..
回复

使用道具 举报

Lv6.析梦学徒

Fuzzy Ginkgo
Taciturn Knight

梦石
0
星屑
60575
在线时间
1933 小时
注册时间
2010-6-26
帖子
1605

烫烫烫开拓者

5
发表于 2012-2-17 21:06:13 | 只看该作者
本帖最后由 orzfly 于 2012-2-17 21:06 编辑

在231下面再加一个
return $user_sprite=[] if $user_sprite.nil?
我的言论只代表我个人的观点,不代表雇主及/或任何第三方的立场。
Opinions expressed are solely my own and do not express the views or opinions of my employer and/or any third parties.
捐赠 | GitHub
回复

使用道具 举报

Lv1.梦旅人

沉睡的八宝粥 

梦石
0
星屑
64
在线时间
832 小时
注册时间
2011-4-22
帖子
2996

短篇七萝莉正太组季军

6
 楼主| 发表于 2012-2-17 21:21:35 | 只看该作者
本帖最后由 八宝粥先生 于 2012-2-17 21:21 编辑
orzfly 发表于 2012-2-17 21:06
在231下面再加一个
return $user_sprite=[] if $user_sprite.nil?


虽然好了,
但是新的问题又出现了...
菜单页面进不去了..

就是按下ESC键
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-29 07:56

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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