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

Project1

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

[已经过期] 整合显示本文&&鼠标响应图片2个脚本后有一个问题不能解决

[复制链接]

Lv1.梦旅人

梦石
0
星屑
136
在线时间
1050 小时
注册时间
2006-5-3
帖子
774
跳转到指定楼层
1
 楼主| 发表于 2013-2-28 17:54:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 gaofei677 于 2013-2-28 18:06 编辑

前天开始学习了脚本,今天试了试更改两个脚本,结果最后有一个大BUG不能解决,想请各位帮我看看

两个原始脚本分别是
                             1.显示变量
                             2.鼠标响应图片

1.显示变量的脚本功能是:把某些你需要的变量显示在屏幕上
2.鼠标响应图片脚本的功能是:把鼠标放在某张图片上,这张图片变成另外一张图片,点击图片触发公共时间

后来我把两个脚本整合了一下,功能变成了:
                                                           把鼠标放在图片上,这张图片不仅可以显示变成另外一张图片,还可以显示一个你指定的文本

现在有的BUG是:如果屏幕上只有一张带有上述功能的图片,那么工作正常,但是如果有2张或者2张以上,就不会显示相应的文本了(其实是显示了,只是显示了一帧以后立刻被刷新,就没了)


附上工程:
鼠标相应图片&文本_BUG版.rar (267.45 KB, 下载次数: 79)



下面第一个是原始,显示变量脚本
      第二个是原始,鼠标响应图片脚本(有一个鼠标脚本,不过我觉得这里不用给出来)
      第三个是整合的,新的鼠标相应图片&&文本脚本
  1. #==========================================================================
  2. # 本脚本来自www.66rpg.com,用于任何游戏请保留此信息。
  3. #==========================================================================

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

  6. $var = []
  7. $var = [[11,280,10],[2,280,45],[3,280,80],[4,280,115],[5,280,150],[6,400,10],[7,400,45],[8,400,80],[9,400,115],[10,400,150]] #所有需要显示在地图并且刷新的变量,可在游戏中用脚本更改。格式:[变量编号,x坐标,y坐标]

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

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

  61. class Scene_Map
  62. alias  old_start start
  63. def start
  64. old_start
  65. @var_window = Window_Var.new
  66.   @var_window.opacity = 0
  67.   end
  68. #--------------------------------------------------------------------------
  69. # ● 刷新画面
  70. #--------------------------------------------------------------------------
  71. alias var_66rpg_update update
  72. def update
  73.   var_66rpg_update
  74.   if $game_switches[VAR_SWITCH]
  75.     @var_window.visible = true      
  76.     @var_window.refresh if @var_window.judge
  77.   else
  78.     @var_window.visible = false
  79.   end
  80. end
  81. end
  82. #==========================================================================
  83. # 本脚本来自www.66rpg.com,用于任何游戏请保留此信息。
  84. #==========================================================================

复制代码
  1. class Game_Picture

  2. def name=(str)
  3.    @name = str
  4. end

  5. end

  6. class Sprite_Picture

  7. alias update_old update
  8. def update
  9.    update_old
  10.    return if @picture_name == "" or @picture_name[/cmd/].nil?
  11.    mx,my = Mouse.get_mouse_pos
  12.    lx = self.x - self.ox
  13.    rx = lx + self.bitmap.width
  14.    ty = self.y - self.oy
  15.    by = ty + self.bitmap.height
  16.    if mx < lx or mx > rx or my < ty or my > by or
  17.      self.bitmap.get_pixel(mx-lx,my-ty).alpha == 0
  18.      @picture.name = @picture.name.split(/_/)[0]+"_"[email protected](/_/)[1]
  19.      return
  20.    end
  21.    if @picture.name.split(/_/)[2].nil?
  22.      @picture.name = @picture.name + "_02"
  23.    end
  24.    if Input.trigger?(13)
  25.      @picture.name.split(/_/)[0].sub(/cmd([0-9]+)/,"")
  26.      $game_temp.common_event_id = $1.to_i
  27.    end
  28. end

  29. end
复制代码
###############################################################################################################################################################

  1. ###########绘制文本框#########
  2. class Window_Var < Window_Base


  3.   
  4. def initialize
  5.   super(0, 0, 640, 460)
  6.   self.opacity = 255
  7.   self.visible = false
  8.   @zi = $zi
  9.   refresh
  10. end


  11. def refresh
  12. @zi = $zi
  13.   self.contents.clear
  14.   mx,my = Mouse.get_mouse_pos
  15.   self.contents.draw_text(mx-80, my-140, 200, 200, @zi)
  16. end
  17. end
  18. #########################################
  19. class Scene_Map
  20. alias  old_start start
  21. def start
  22. old_start
  23. @var_window = Window_Var.new
  24.   @var_window.opacity = 0
  25.   end

  26. alias old_update update
  27. def update
  28.   old_update
  29. if $zi != 0
  30.   @var_window.visible = true      
  31.   @var_window.refresh
  32. else
  33.   @var_window.visible = false
  34. end
  35. end
  36. end

  37. #######鼠标响应图片&&文本########
  38. class Game_Picture

  39. def name=(str)
  40.    @name = str
  41. end
  42. end


  43. class Sprite_Picture

  44. alias update_old update
  45. def update
  46.    update_old
  47.    return if @picture_name == "" or @picture_name[/cmd/].nil?
  48.    mx,my = Mouse.get_mouse_pos
  49.    lx = self.x - self.ox
  50.    rx = lx + self.bitmap.width
  51.    ty = self.y - self.oy
  52.    by = ty + self.bitmap.height
  53.    if mx < lx or mx > rx or my < ty or my > by or
  54.      self.bitmap.get_pixel(mx-lx,my-ty).alpha == 0
  55.      @picture.name = @picture.name.split(/_/)[0]+"_"[email protected](/_/)[1]
  56.      $zi = 0
  57.      return
  58.    else

  59.    end
  60.    if @picture.name.split(/_/)[2].nil?
  61.      @picture.name = @picture.name + "_02"
  62.      q = @picture.name[3]
  63.      $zi = "还有#{q}天杀青"
  64.    end
  65.    
  66.    
  67.    if Input.trigger?(13)
  68.      @picture.name.split(/_/)[0].sub(/cmd([0-9]+)/,"")
  69.      $game_temp.common_event_id = $1.to_i
  70.    end

  71. end

  72. end
复制代码

点评

您有新回复了。  发表于 2013-3-3 14:58
漏夏同人
《咱的夏天》
下载地址:http://tieba.baidu.com/p/2681607456
人员招募:http://rpg.blue/thread-339747-1-1.html

Lv1.梦旅人

匿·蹤

梦石
0
星屑
65
在线时间
99 小时
注册时间
2006-3-19
帖子
456
2
发表于 2013-3-2 22:19:30 | 只看该作者
看了下,太纠结了,主要就是$zi赋值的问题。
所有的问题,都是由于刷新优先级引发的。
变量显示的刷新优先级应该会低于鼠标响应图片的优先级,所以就特么的蛋疼了。。。。
建议合并至同一优先级中。。。
卐忍 → 解忍 → 元忍 → 隐忍 → 卍忍 → 匿踪(最终)
完全退步到了卐忍阶段
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
136
在线时间
1050 小时
注册时间
2006-5-3
帖子
774
3
 楼主| 发表于 2013-3-3 16:20:45 | 只看该作者
OCTSJimmy 发表于 2013-3-2 22:19
看了下,太纠结了,主要就是$zi赋值的问题。
所有的问题,都是由于刷新优先级引发的。
变量显示的刷新优先 ...

  今天在这里修改了一上午,各种出错,还是不行,后来发现用$zi作为文本是否显示的开启条件时,图片1,2,3。。。。等等所有的图片都同时使用$zi,所以造成只有一张图片效果正常,2张以上图片则,当你放弃图片1去触碰图片2时,图片1把$zi 赋值为0了,所以图片2也就不显示文本了。
  解决办法就是每张图片有自己独立的$zi,也就是把每张图片加一个属性@zi,把@zi作为文本是否开启的条件,但是我实在不知道如何在c lass Sprite_Picture,以外增加和修改@zi,因为这两个脚本非别用的是c lass Window_Var < Window_Base 和 c lass Game_Picture
漏夏同人
《咱的夏天》
下载地址:http://tieba.baidu.com/p/2681607456
人员招募:http://rpg.blue/thread-339747-1-1.html
回复 支持 反对

使用道具 举报

Lv1.梦旅人

匿·蹤

梦石
0
星屑
65
在线时间
99 小时
注册时间
2006-3-19
帖子
456
4
发表于 2013-3-3 17:22:05 | 只看该作者
本帖最后由 OCTSJimmy 于 2013-3-3 18:26 编辑
gaofei677 发表于 2013-3-3 16:20
今天在这里修改了一上午,各种出错,还是不行,后来发现用$zi作为文本是否显示的开启条件时,图片1,2 ...


假如需要在类的外面折腾内部变量,其实可以考虑先将这个玩意变成实例变量。
比如:attr_reader :zi
接着:
RUBY 代码复制
  1. def zi=(new_zi)
  2.     @zi = new_zi
  3. end

就可以直接在外部修改这个该死的东东了。
比如类名是A,则可以 A.zi="XXX"

评分

参与人数 1星屑 +75 收起 理由
怪蜀黍 + 75 热心帮助糖

查看全部评分

卐忍 → 解忍 → 元忍 → 隐忍 → 卍忍 → 匿踪(最终)
完全退步到了卐忍阶段
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
136
在线时间
1050 小时
注册时间
2006-5-3
帖子
774
5
 楼主| 发表于 2013-3-4 09:11:38 | 只看该作者
OCTSJimmy 发表于 2013-3-3 17:22
假如需要在类的外面折腾内部变量,其实可以考虑先将这个玩意变成实例变量。
比如:attr_reader :zi
接着 ...

感谢你这么热心帮我,今天晚些时候,回去试试
漏夏同人
《咱的夏天》
下载地址:http://tieba.baidu.com/p/2681607456
人员招募:http://rpg.blue/thread-339747-1-1.html
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-22 20:06

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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