Project1

标题: 自制的图片菜单,在游戏中通过对话调出,要怎么做呢? [打印本页]

作者: raymondyrf    时间: 2013-5-1 21:38
标题: 自制的图片菜单,在游戏中通过对话调出,要怎么做呢?
如题,我下载了很多范例,但是基本上都是调用窗口菜单的。
我自己制作好一个窗口菜单的图片了,就想通过脚本,加上事件,通过对话中调出来,然后再像人物状态菜单里面那样,把获取对应数值,在某个区域draw出来。

我的思路大概就是,通过Scene来create一个window,但是window里没有任何原来系统设定的那种窗口、菜单什么的,完完全全就是把我做好的图刷出来
再来就是获取游戏中某些变量,比如说人物经验值啊什么的,然后在我这个图片菜单中的某个区域把这些已经获取的数值draw出来。

问题是,我不知道怎么写···

求助一下各位大神!!
作者: j433463    时间: 2013-5-1 22:22
简单的说,就是想做一个可以用脚本或事件调出的显示变量菜单窗口吧?
作者: raymondyrf    时间: 2013-5-1 22:24
j433463 发表于 2013-5-1 22:22
简单的说,就是想做一个可以用脚本或事件调出的显示变量菜单窗口吧?

1、显示多个变量
2、这个窗口其实就是我事先弄好一个的图片
作者: j433463    时间: 2013-5-1 23:41
本帖最后由 j433463 于 2013-5-1 23:49 编辑
raymondyrf 发表于 2013-5-1 22:24
1、显示多个变量
2、这个窗口其实就是我事先弄好一个的图片


不太明白您的意思,如果只是一个显示变量的小窗口,那只需要一个 Widnow_XXX 的窗口脚本,并且在 Scene_Map 中建一个 create_xxx_window 视窗调用 Window_XXX.new 而已,

如果是要菜单,可以参考这样子:



Window_VarInfo
RUBY 代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Window_VarInfo
  4. #------------------------------------------------------------------------------
  5. #  显示变量资讯的视窗
  6. #==============================================================================
  7. class Window_VarInfo < Window_Base
  8.   #--------------------------------------------------------------------------
  9.   # ● 初始化物件
  10.   #--------------------------------------------------------------------------
  11.   def initialize
  12.     super(0, 0, Graphics.width, Graphics.height)
  13.     refresh
  14.   end
  15.   #--------------------------------------------------------------------------
  16.   # ● 重新整理
  17.   #--------------------------------------------------------------------------
  18.   def refresh
  19.     contents.clear
  20.     draw_actor_face($game_party.members[0], 10, 20)
  21.     draw_text(120, line_height * 0 + 30, 80, line_height, Vocab::param(2), 0)
  22.     draw_text(200, line_height * 0 + 30, 80, line_height, $game_actors[1].param(2), 2)
  23.     draw_text(120, line_height * 1 + 30, 80, line_height, Vocab::param(3), 0)
  24.     draw_text(200, line_height * 1 + 30, 80, line_height, $game_actors[1].param(3), 2)   
  25.   end
  26.  
  27. end



Scene_MyMenu
RUBY 代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Scene_MyMenu
  4. #------------------------------------------------------------------------------
  5. #  选单画面
  6. #==============================================================================
  7. class Scene_MyMenu < Scene_MenuBase
  8.   #--------------------------------------------------------------------------
  9.   # ● 开始处理
  10.   #--------------------------------------------------------------------------
  11.   def start
  12.     super
  13.     create_varinfo_window
  14.   end
  15.   #--------------------------------------------------------------------------
  16.   # ● 生成视窗
  17.   #--------------------------------------------------------------------------
  18.   def create_varinfo_window
  19.     @vf_window = Window_VarInfo.new
  20.     @vf_window.x = 0
  21.     @vf_window.y = 50
  22.     @vf_window.opacity = 0
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # ● 生成背景
  26.   #--------------------------------------------------------------------------
  27.   def create_background
  28.     @background_sprite = Sprite.new
  29.     @background_sprite.bitmap = Cache.load_bitmap("Graphics/Pictures/","Plain") #背景图
  30.     @background_sprite.color.set(0, 0, 0, 0)
  31.   end
  32.   #--------------------------------------------------------------------------
  33.   # ● 结束背景
  34.   #--------------------------------------------------------------------------
  35.   def dispose_background
  36.     @background_sprite.dispose
  37.   end
  38.   #--------------------------------------------------------------------------
  39.   # ● 刷新,侦测按钮
  40.   #--------------------------------------------------------------------------
  41.   def update
  42.     super
  43.     SceneManager.goto(Scene_Map) if Input.trigger?(:B) #就是按 Esc 结束菜单
  44.   end
  45.  
  46. end



测试截图:



基本上,在窗口中显示几个变量都只是多加几个 draw_text 分别设不同的座标显示而已,一个或多个都用的是同样的窗口脚本。

至于在地图上显示变量窗口的脚本,我以前曾贴过,虽然那是显示一个变量的,但同样多加几个 draw_text 并且把窗口长宽加大,也是可以显示多个变量,不过就是再把窗口 opacity 设为 0,加个背景图而已。
作者: raymondyrf    时间: 2013-5-2 00:07
j433463 发表于 2013-5-1 23:41
不太明白您的意思,如果只是一个显示变量的小窗口,那只需要一个 Widnow_XXX 的窗口脚本,并且在 Scene_M ...

您给的这个已经非常非常贴近了。
只差一点点,就是能不能背景不要变黑
就是说在我设定的那张图片不够大(故意不够大的)的时候,余下的地方是当前场景没有被菜单背景遮罩的地方,而不是黑色呢??



作者: j433463    时间: 2013-5-2 00:26
那要参考主菜单的方式了,因为实际上菜单不是在地图上的,它只是在呼叫主菜单时将当时的画面截图,然后显示在菜单背景而已,所以如果注意看主菜单背景的地图,画面是静止的。
作者: raymondyrf    时间: 2013-5-2 00:37
j433463 发表于 2013-5-2 00:26
那要参考主菜单的方式了,因为实际上菜单不是在地图上的,它只是在呼叫主菜单时将当时的画面截图,然后显示 ...

那请问有没有其他方法?就相当于触发后直接在原来的地方放置图片和draw数据?
作者: raymondyrf    时间: 2013-5-2 00:50
j433463 发表于 2013-5-2 00:26
那要参考主菜单的方式了,因为实际上菜单不是在地图上的,它只是在呼叫主菜单时将当时的画面截图,然后显示 ...

或者把这个黑色变透明?不管静止不静止,就是要显示到没有被遮住的地图就好了···
作者: j433463    时间: 2013-5-2 00:57
本帖最后由 j433463 于 2013-5-2 01:00 编辑

或者您想要这样?是吗:


RUBY 代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Window_Variables
  4. #------------------------------------------------------------------------------
  5. #     地图上显示变量窗口
  6. #==============================================================================
  7. #  在不想要显示的地图备注栏中放上 <NOHPHUB> 就可以隐藏。
  8. #==============================================================================
  9.  
  10. HPHUB_X = 0 #显示变量窗口的 X 座标
  11. HPHUB_Y = 0 #显示变量窗口的 Y 座标
  12.  
  13. HPHUB_INPUT = :C #切换显示/隐藏按钮, 若不想要按钮切换, 等号右边可以清除, 或改为 nil 或 "" 或 ''
  14.  
  15. class Window_Variables < Window_Base
  16.   #--------------------------------------------------------------------------
  17.   # ● 初始化
  18.   #--------------------------------------------------------------------------
  19.   def initialize
  20.     super(0, 0, 350, 250)
  21.     self.opacity = 0
  22.     self.back_opacity = 120
  23.     @icon = 0
  24.     @variable = 0
  25.     @o_hp = 0
  26.     refresh
  27.   end
  28.   #--------------------------------------------------------------------------
  29.   # ● 刷新
  30.   #--------------------------------------------------------------------------
  31.   def refresh
  32.     rect = Rect.new(0,0,350,250)
  33.     draw_background(rect)
  34.     draw_actor_face($game_party.members[0], 10, 20)
  35.     draw_text(120, line_height * 0 + 30, 80, line_height, Vocab::param(2), 0)
  36.     draw_text(200, line_height * 0 + 30, 80, line_height, $game_actors[1].param(2), 2)
  37.     draw_text(120, line_height * 1 + 30, 80, line_height, Vocab::param(3), 0)
  38.     draw_text(200, line_height * 1 + 30, 80, line_height, $game_actors[1].param(3), 2)   
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   # ● 绘制背景
  42.   #--------------------------------------------------------------------------
  43.   def draw_background(rect)
  44.     bitmap = Cache.load_bitmap("Graphics/Pictures/", "001_战士_A") #背景图
  45.     rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  46.     contents.blt(contents_width - bitmap.width, contents_height - bitmap.height, bitmap, rect, 255)
  47.     bitmap.dispose
  48.   end
  49. end
  50.  
  51. #==============================================================================
  52. # ■ Scene_Map
  53. #------------------------------------------------------------------------------
  54. #      地图生成窗口
  55. #==============================================================================
  56. class Scene_Map < Scene_Base
  57.   alias new_start start
  58.   def start
  59.     new_start
  60.     @varia_window = Window_Variables.new
  61.     @varia_window.x = HPHUB_X
  62.     @varia_window.y = HPHUB_Y
  63.     @varia_window.visible = false
  64.   end
  65.   #--------------------------------------------------------------------------
  66.   # ● 刷新
  67.   #--------------------------------------------------------------------------
  68.   alias new_update update
  69.   def update
  70.     new_update
  71.     #地图备注检查
  72.     return if (/<NOHPHUB>/i.match($game_map.note)) != nil
  73.     #初始值
  74.     @show_hp_hud = true if @show_hp_hud == nil
  75.     #按键切换开/关
  76.     if HPHUB_INPUT != nil && HPHUB_INPUT != "" && HPHUB_INPUT != ''
  77.       if Input.trigger?(HPHUB_INPUT)
  78.         if @show_hp_hud != true
  79.           @show_hp_hud = true
  80.         else
  81.           @show_hp_hud = false
  82.         end
  83.       end
  84.     end
  85.     #显示/隐藏执行
  86.     if @show_hp_hud == true
  87.       @varia_window.refresh
  88.       @varia_window.visible = true
  89.     else
  90.       @varia_window.visible = false
  91.       #close_varia_window
  92.     end
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ● 释放
  96.   #--------------------------------------------------------------------------
  97.   alias new_terminate terminate
  98.   def terminate
  99.     @varia_window.dispose
  100.     new_terminate
  101.   end
  102.   #--------------------------------------------------------------------------
  103.   # ● 关闭
  104.   #--------------------------------------------------------------------------
  105.   def close_varia_window
  106.     @varia_window.close
  107.     update until @varia_window.close?
  108.   end
  109. end
  110. #==============================================================================
  111. # ■ Game_Map
  112. #------------------------------------------------------------------------------
  113. #  管理地图的类。
  114. #==============================================================================
  115. class Game_Map
  116.   #--------------------------------------------------------------------------
  117.   # ● 取得地图备注栏
  118.   #--------------------------------------------------------------------------
  119.   def note
  120.     @map.note
  121.   end
  122. end


这是临时用以前写的地图显示HP变量脚本改的,加上背景图,可以用按钮 C 也就是空白键切换显示/隐藏,如果想用别的按钮也可以自己设定。

测试截图:



作者: raymondyrf    时间: 2013-5-2 01:00
j433463 发表于 2013-5-2 00:57
或者您想要这样?是吗:

看图片我觉得可以,只是可以通过对话呼出而不是按键么?
作者: j433463    时间: 2013-5-2 01:05
对话?您指的是在事件呼出它,还是在对话框中呼出它?
作者: raymondyrf    时间: 2013-5-2 01:07
j433463 发表于 2013-5-2 01:05
对话?您指的是在事件呼出它,还是在对话框中呼出它?

事件就可以了
作者: j433463    时间: 2013-5-2 01:58
本帖最后由 j433463 于 2013-5-2 02:50 编辑

不好意思,刚才被自己一个小失误,搞得测试半天都不能正常切换,后来才发现是事件中开关指定错了,一场乌龙拖延...窘

改成的事件中操作开关切换显示/隐藏:

RUBY 代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Window_Variables
  4. #------------------------------------------------------------------------------
  5. #     地图上显示变量窗口
  6. #==============================================================================
  7.  
  8. HPHUB_X = 100 #显示变量窗口的 X 座标
  9. HPHUB_Y = 0 #显示变量窗口的 Y 座标
  10.  
  11. HPHUB_SWITCH = 100 #切换 显示 / 隐藏 窗口的开关ID
  12.  
  13. class Window_Variables < Window_Base
  14.   #--------------------------------------------------------------------------
  15.   # ● 初始化
  16.   #--------------------------------------------------------------------------
  17.   def initialize
  18.     super(0, 0, 350 + standard_padding * 2, 250 + standard_padding * 2)
  19.     self.opacity = 0
  20.     #self.back_opacity = 120
  21.     refresh
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # ● 刷新
  25.   #--------------------------------------------------------------------------
  26.   def refresh
  27.     draw_background
  28.     draw_actor_face($game_party.members[0], 10, 20)
  29.     change_color(system_color)
  30.     draw_text(120, line_height * 0 + 30, 64, line_height, Vocab::param(2) + ":", 0)
  31.     draw_text(120, line_height * 1 + 30, 64, line_height, Vocab::param(3) + ":", 0)
  32.     change_color(normal_color)
  33.     draw_text(168, line_height * 0 + 30, 48, line_height, $game_actors[1].param(2), 2)
  34.     draw_text(168, line_height * 1 + 30, 48, line_height, $game_actors[1].param(3), 2)   
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● 绘制背景
  38.   #--------------------------------------------------------------------------
  39.   def draw_background
  40.     bitmap = Cache.picture("001_战士_A") #背景图
  41.     rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  42.     contents.blt(contents_width - bitmap.width, contents_height - bitmap.height, bitmap, rect, 255)
  43.     bitmap.dispose
  44.   end
  45. end
  46.  
  47. #==============================================================================
  48. # ■ Scene_Map
  49. #------------------------------------------------------------------------------
  50. #      地图生成窗口
  51. #==============================================================================
  52. class Scene_Map < Scene_Base
  53.   alias new_start start
  54.   def start
  55.     new_start
  56.     @varia_window = Window_Variables.new
  57.     @varia_window.x = HPHUB_X
  58.     @varia_window.y = HPHUB_Y
  59.     @varia_window.visible = false
  60.   end
  61.   #--------------------------------------------------------------------------
  62.   # ● 刷新
  63.   #--------------------------------------------------------------------------
  64.   alias new_update update
  65.   def update
  66.     new_update
  67.     #初始值
  68.     return if @show_hp_hud == $game_switches[HPHUB_SWITCH]
  69.     p $game_switches[HPHUB_SWITCH].to_s + "=>" + @show_hp_hud.to_s
  70.     if $game_switches[HPHUB_SWITCH] != true
  71.       @show_hp_hud = false
  72.     else
  73.       @show_hp_hud = true
  74.     end
  75.     #显示/隐藏执行
  76.     if @show_hp_hud == true
  77.       @varia_window.refresh
  78.       @varia_window.visible = true
  79.     else
  80.       @varia_window.visible = false
  81.       #close_varia_window
  82.     end
  83.   end
  84.   #--------------------------------------------------------------------------
  85.   # ● 释放
  86.   #--------------------------------------------------------------------------
  87.   alias new_terminate terminate
  88.   def terminate
  89.     @varia_window.dispose
  90.     new_terminate
  91.   end
  92.   #--------------------------------------------------------------------------
  93.   # ● 关闭
  94.   #--------------------------------------------------------------------------
  95.   def close_varia_window
  96.     @varia_window.close
  97.     update until @varia_window.close?
  98.   end
  99. end



明明是开关 100 号,我在事件指定 001 号开启,噗,怎么试都没反应...
脚本稍作整理,把一些多余没用到的变量和程序去除了。
作者: raymondyrf    时间: 2013-5-2 02:08
j433463 发表于 2013-5-2 01:58
不好意思,刚才被自己一个小失误,搞得测试半天都不能正常切换,后来才发现是事件中开关指定错了,一场乌龙 ...

估计可以,准备睡觉了也没有时间去做详细测试,明天看看如何,再告诉你结果吧
总之太谢谢你啦!!
作者: raymondyrf    时间: 2013-5-2 13:21
本帖最后由 raymondyrf 于 2013-5-2 13:23 编辑
j433463 发表于 2013-5-2 01:58
不好意思,刚才被自己一个小失误,搞得测试半天都不能正常切换,后来才发现是事件中开关指定错了,一场乌龙 ...

您给的那个东西成功了,达到了预期的效果。
太感谢了!
顺带问一句,draw_text这个语句实现出来的,把数值draw出来之后的数值都是右对齐的,比如这样:
1
100
但我们的习惯是:
1
100
这样显示的,所以我想问这个有没有得改?



作者: raymondyrf    时间: 2013-5-2 15:35
j433463 发表于 2013-5-2 01:58
不好意思,刚才被自己一个小失误,搞得测试半天都不能正常切换,后来才发现是事件中开关指定错了,一场乌龙 ...


有问题出现呢,这个是怎么回事呢??

我把金钱的值draw到这里,本来游戏默认是0元,后来我同过某个事件添加了金钱,这个0依然存在,只是在上面加了501三个数字而已。
包括hp、mp这些值都是同样情况

麻烦帮忙看看是不是我改代码时改出了问题?

RUBY 代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Window_Variables
  4. #------------------------------------------------------------------------------
  5. #     地图上显示变量窗口
  6. #==============================================================================
  7.  
  8. HPHUB_X = 100 #显示变量窗口的 X 座标
  9. HPHUB_Y = 0 #显示变量窗口的 Y 座标
  10.  
  11. HPHUB_SWITCH = 100 #切换 显示 / 隐藏 窗口的开关ID
  12.  
  13. class Window_Variables < Window_Base
  14.   #--------------------------------------------------------------------------
  15.   # ● 初始化
  16.   #--------------------------------------------------------------------------
  17.   def initialize
  18.     super(100, 120, 740, 600)
  19.     self.opacity = 0
  20.     #self.back_opacity = 120
  21.     refresh
  22.   end
  23.  
  24.   #--------------------------------------------------------------------------
  25.   # ● 刷新
  26.   #--------------------------------------------------------------------------
  27.   def refresh
  28.     draw_background
  29.     draw_actor_name($game_actors[1], 330, 140)
  30.     draw_actor_nickname($game_actors[1], 300, 210)
  31.     draw_actor_level($game_actors[1], 330, 177)
  32.     draw_actor_exp($game_actors[1], 520, 177)
  33.     draw_actor_param($game_actors[1], 230, 335, 0)   
  34.     draw_actor_param($game_actors[1], 230, 304, 1)  
  35.     draw_actor_param($game_actors[1], 230, 245, 2)   
  36.     draw_actor_param($game_actors[1], 230, 275, 3)   
  37.     draw_actor_param($game_actors[1], 230, 364, 4)   
  38.     draw_actor_param($game_actors[1], 230, 395, 5)   
  39.     draw_actor_param($game_actors[1], 230, 426, 6)   
  40.     draw_actor_param($game_actors[1], 230, 455, 7)   
  41.     draw_actor_hp($game_actors[1], 430, 455)
  42.     draw_actor_mp($game_actors[1], 430, 485)
  43.     change_color(text_color(6))
  44.     draw_text(250, 385, 300, 300,$game_party.gold, 2)
  45.  
  46.  
  47.   end
  48.   #--------------------------------------------------------------------------
  49.   # ● 绘制背景
  50.   #--------------------------------------------------------------------------
  51.   def draw_background
  52.     bitmap = Cache.picture("plain") #背景图
  53.     rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  54.     contents.blt(contents_width - bitmap.width, contents_height - bitmap.height, bitmap, rect, 255)
  55.     bitmap.dispose
  56.   end
  57. end
  58.  
  59. #==============================================================================
  60. # ■ Scene_Map
  61. #------------------------------------------------------------------------------
  62. #      地图生成窗口
  63. #==============================================================================
  64. class Scene_Map < Scene_Base
  65.   alias new_start start
  66.   def start
  67.     new_start
  68.     @varia_window = Window_Variables.new
  69.     @varia_window.x = HPHUB_X
  70.     @varia_window.y = HPHUB_Y
  71.     @varia_window.visible = false
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # ● 刷新
  75.   #--------------------------------------------------------------------------
  76.   alias new_update update
  77.   def update
  78.     new_update
  79.     #初始值
  80.     return if @show_hp_hud == $game_switches[HPHUB_SWITCH]
  81.     p $game_switches[HPHUB_SWITCH].to_s + "=>" + @show_hp_hud.to_s
  82.     if $game_switches[HPHUB_SWITCH] != true
  83.       @show_hp_hud = false
  84.     else
  85.       @show_hp_hud = true
  86.     end
  87.     #显示/隐藏执行
  88.     if @show_hp_hud == true
  89.       @varia_window.refresh
  90.       @varia_window.visible = true
  91.     else
  92.       @varia_window.visible = false
  93.       #close_varia_window
  94.     end
  95.   end
  96.   #--------------------------------------------------------------------------
  97.   # ● 释放
  98.   #--------------------------------------------------------------------------
  99.   alias new_terminate terminate
  100.   def terminate
  101.     @varia_window.dispose
  102.     new_terminate
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # ● 关闭
  106.   #--------------------------------------------------------------------------
  107.   def close_varia_window
  108.     @varia_window.close
  109.     update until @varia_window.close?
  110.   end
  111. end

作者: raymondyrf    时间: 2013-5-2 16:02
j433463 发表于 2013-5-2 01:58
不好意思,刚才被自己一个小失误,搞得测试半天都不能正常切换,后来才发现是事件中开关指定错了,一场乌龙 ...

OK了,我把素材弄成不透明的就行了,无论如何还是感谢你!帮我解决了一个大问题!
作者: j433463    时间: 2013-5-2 22:53
不好意思,刚刚才上线,那个情况可能是之前的值没有消除,您在 def refresh 第一行放上:
  1. contents.clear
复制代码
让脚本在刷新时先清理窗口画面,应该就可以解决了,保持背景透明不要紧的。
作者: raymondyrf    时间: 2013-5-3 12:22
j433463 发表于 2013-5-2 22:53
不好意思,刚刚才上线,那个情况可能是之前的值没有消除,您在 def refresh 第一行放上:让脚本在刷新时先 ...

原来是这样,谢谢了啊
作者: raymondyrf    时间: 2013-5-3 12:59
j433463 发表于 2013-5-2 22:53
不好意思,刚刚才上线,那个情况可能是之前的值没有消除,您在 def refresh 第一行放上:让脚本在刷新时先 ...

请问您这个window不能同时存在多个吗??
我想再另开一个同样的window来显示其他东西,但是把很多定义的@XX什么的修改好,不会和window_variables重复,
却提示error,stack level too deep
请问怎么解决呢??
作者: j433463    时间: 2013-5-3 14:14
stack level too deep 是一个方法反覆执行到超过处理负担,不知您是怎么改的?

一次开 N 个同样的窗口并不是不行,譬如把 def start 下的内容重覆一遍,如下:
  1.   alias new_start start
  2.   def start
  3.     new_start
  4.     @varia_window = Window_Variables.new
  5.     @varia_window.x = HPHUB_X
  6.     @varia_window.y = HPHUB_Y
  7.     @varia_window.visible = false
  8.     @varia_window2 = Window_Variables.new
  9.     @varia_window2.x = 0
  10.     @varia_window2.y = 200
  11.   end
复制代码
执行后您会看到一个窗口已经开启,若打开100号开关又会看到另一个窗口出现,但这样做,两个窗口内容是一样的,因为两个都是用 Window_Variables 建立的窗口。

那也可以改一下,用两个 Window_Variables 和 Window_Variables2 来做不同窗口,像这样:

RUBY 代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Window_Variables
  4. #------------------------------------------------------------------------------
  5. #     地图上显示变量窗口
  6. #==============================================================================
  7. #  在不想要显示的地图备注栏中放上 <NOHPHUB> 就可以隐藏。
  8. #==============================================================================
  9.  
  10. HPHUB_X = 100 #显示变量窗口的 X 座标
  11. HPHUB_Y = 0 #显示变量窗口的 Y 座标
  12.  
  13. HPHUB_SWITCH = 100 #切换 显示 / 隐藏 窗口的开关ID
  14.  
  15. class Window_Variables < Window_Base
  16.   #--------------------------------------------------------------------------
  17.   # ● 初始化
  18.   #--------------------------------------------------------------------------
  19.   def initialize
  20.     super(100, 120, 740, 600)
  21.     self.opacity = 0
  22.     refresh
  23.   end
  24.  
  25.   #--------------------------------------------------------------------------
  26.   # ● 刷新
  27.   #--------------------------------------------------------------------------
  28.   def refresh
  29.     draw_background
  30.     draw_actor_name($game_actors[1], 330, 140)
  31.     draw_actor_nickname($game_actors[1], 300, 210)
  32.     draw_actor_level($game_actors[1], 330, 177)
  33.     draw_actor_exp($game_actors[1], 520, 177)
  34.     draw_actor_param($game_actors[1], 230, 335, 0)   
  35.     draw_actor_param($game_actors[1], 230, 304, 1)  
  36.     draw_actor_param($game_actors[1], 230, 245, 2)   
  37.     draw_actor_param($game_actors[1], 230, 275, 3)   
  38.     draw_actor_param($game_actors[1], 230, 364, 4)   
  39.     draw_actor_param($game_actors[1], 230, 395, 5)   
  40.     draw_actor_param($game_actors[1], 230, 426, 6)   
  41.     draw_actor_param($game_actors[1], 230, 455, 7)   
  42.     draw_actor_hp($game_actors[1], 430, 455)
  43.     draw_actor_mp($game_actors[1], 430, 485)
  44.     change_color(text_color(6))
  45.     draw_text(250, 385, 300, 300,$game_party.gold, 2)
  46.  
  47.  
  48.   end
  49.   #--------------------------------------------------------------------------
  50.   # ● 绘制背景
  51.   #--------------------------------------------------------------------------
  52.   def draw_background
  53.     bitmap = Cache.picture("plain") #背景图
  54.     rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  55.     contents.blt(contents_width - bitmap.width, contents_height - bitmap.height, bitmap, rect, 255)
  56.     bitmap.dispose
  57.   end
  58. end
  59.  
  60. class Window_Variables2 < Window_Base
  61.   #--------------------------------------------------------------------------
  62.   # ● 初始化
  63.   #--------------------------------------------------------------------------
  64.   def initialize
  65.     super(0, 0, 350 + standard_padding * 2, 250 + standard_padding * 2)
  66.     self.opacity = 0
  67.     refresh
  68.   end
  69.   #--------------------------------------------------------------------------
  70.   # ● 刷新
  71.   #--------------------------------------------------------------------------
  72.   def refresh
  73.     contents.clear
  74.     draw_background
  75.     draw_actor_face($game_party.members[0], 10, 20)
  76.     change_color(system_color)
  77.     draw_text(120, line_height * 0 + 30, 72, line_height, Vocab::param(2) + ":", 0)
  78.     draw_text(120, line_height * 1 + 30, 72, line_height, Vocab::param(3) + ":", 0)
  79.     draw_text(120, line_height * 2 + 30, 72, line_height, "时间" + ":", 0)   
  80.     change_color(normal_color)
  81.     draw_text(168, line_height * 0 + 30, 48, line_height, $game_actors[1].param(2), 2)
  82.     draw_text(168, line_height * 1 + 30, 48, line_height, $game_actors[1].param(3), 2)
  83.     draw_text(168, line_height * 2 + 30, 48, line_height, $game_system.playtime_s, 2)
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # ● 绘制背景
  87.   #--------------------------------------------------------------------------
  88.   def draw_background
  89.     bitmap = Cache.picture("001_战士_A") #背景图
  90.     rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  91.     contents.blt(contents_width - bitmap.width, contents_height - bitmap.height, bitmap, rect, 255)
  92.     bitmap.dispose
  93.   end
  94. end
  95.  
  96. #==============================================================================
  97. # ■ Scene_Map
  98. #------------------------------------------------------------------------------
  99. #      地图生成窗口
  100. #==============================================================================
  101. class Scene_Map < Scene_Base
  102.   alias new_start start
  103.   def start
  104.     new_start
  105.  
  106.     @varia_window = Window_Variables.new
  107.     @varia_window.x = HPHUB_X
  108.     @varia_window.y = HPHUB_Y
  109.     @varia_window.visible = false
  110.  
  111.     @varia_window2 = Window_Variables2.new
  112.     @varia_window2.x = 0
  113.     @varia_window2.y = 200
  114.     @varia_window2.visible = false
  115.   end
  116.   #--------------------------------------------------------------------------
  117.   # ● 刷新
  118.   #--------------------------------------------------------------------------
  119.   alias new_update update
  120.   def update
  121.     new_update
  122.     #初始值
  123.     return if @show_hp_hud == $game_switches[HPHUB_SWITCH]
  124.     p $game_switches[HPHUB_SWITCH].to_s + "=>" + @show_hp_hud.to_s
  125.     if $game_switches[HPHUB_SWITCH] != true
  126.       @show_hp_hud = false
  127.     else
  128.       @show_hp_hud = true
  129.     end
  130.     #显示/隐藏执行
  131.     if @show_hp_hud == true
  132.       @varia_window.refresh
  133.       @varia_window.visible = true
  134.  
  135.       @varia_window2.refresh
  136.       @varia_window2.visible = true
  137.  
  138.     else
  139.       @varia_window.visible = false
  140.  
  141.       @varia_window2.visible = false
  142.     end
  143.   end
  144.   #--------------------------------------------------------------------------
  145.   # ● 释放
  146.   #--------------------------------------------------------------------------
  147.   alias new_terminate terminate
  148.   def terminate
  149.     @varia_window.dispose
  150.     new_terminate
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ● 关闭
  154.   #--------------------------------------------------------------------------
  155.   def close_varia_window
  156.     @varia_window.close
  157.     update until @varia_window.close?
  158.   end
  159. end


这样子开关 100 开关时,会同时控制显示 / 隐藏两个窗口,而且窗口内容是不同的。
作者: raymondyrf    时间: 2013-5-3 19:13
j433463 发表于 2013-5-3 14:14
stack level too deep 是一个方法反覆执行到超过处理负担,不知您是怎么改的?

一次开 N 个同样的窗口并不 ...

我的意思是,在用另一个变量去控制打开另一个那样的窗口。也是以上的方法么??
作者: raymondyrf    时间: 2013-5-3 21:15
j433463 发表于 2013-5-3 14:14
stack level too deep 是一个方法反覆执行到超过处理负担,不知您是怎么改的?

一次开 N 个同样的窗口并不 ...

我解决了,在上面定义另一个变量控制第二个窗口的显示与否就行了,谢谢你啦!!
作者: raymondyrf    时间: 2013-5-8 00:45
j433463 发表于 2013-5-3 14:14
stack level too deep 是一个方法反覆执行到超过处理负担,不知您是怎么改的?

一次开 N 个同样的窗口并不 ...

我想再问一下,如果我想多开关控制多个窗口呢??
作者: j433463    时间: 2013-5-8 08:47
就像您前面说的,不同的窗口用不同的变量.visible 为 true 或 false,来决定窗口的显示或隐藏,两个窗口和多个窗口的方式没有什么差别。

作者: raymondyrf    时间: 2013-5-8 17:59
本帖最后由 raymondyrf 于 2013-5-8 18:40 编辑
j433463 发表于 2013-5-8 08:47
就像您前面说的,不同的窗口用不同的变量.visible 为 true 或 false,来决定窗口的显示或隐藏,两个窗口和 ...


请问我这样写有没有问题呢??我知道方法,却不知道怎么写···

RUBY 代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Window_Variables
  4. #------------------------------------------------------------------------------
  5. #     地图上显示变量窗口
  6. #==============================================================================
  7. #  在不想要显示的地图备注栏中放上 <NOHPHUB> 就可以隐藏。
  8. #==============================================================================
  9.  
  10. HPHUB_X = 100 #显示变量窗口的 X 座标
  11. HPHUB_Y = 0 #显示变量窗口的 Y 座标
  12.  
  13. HPHUB_SWITCH = 100 #切换 显示 / 隐藏 窗口的开关ID
  14. HPHUB_SWITCH1 = 99 #切换 显示 / 隐藏 窗口的开关ID
  15.  
  16.  
  17.  
  18. class Window_Variables < Window_Base
  19.   #--------------------------------------------------------------------------
  20.   # ● 初始化
  21.   #--------------------------------------------------------------------------
  22.   def initialize
  23.  
  24.     super(100, 120, 740, 600)
  25.     self.opacity = 0
  26.     refresh
  27.   end
  28.  
  29.   #--------------------------------------------------------------------------
  30.   # ● 刷新
  31.   #--------------------------------------------------------------------------
  32.   def refresh
  33.     draw_background
  34.     draw_actor_name($game_actors[1], 330, 140)
  35.     draw_actor_nickname($game_actors[1], 300, 210)
  36.     draw_actor_level($game_actors[1], 330, 177)
  37.     draw_actor_exp($game_actors[1], 520, 177)
  38.     draw_actor_param($game_actors[1], 230, 335, 0)   
  39.     draw_actor_param($game_actors[1], 230, 304, 1)   
  40.     draw_actor_param($game_actors[1], 230, 245, 2)   
  41.     draw_actor_param($game_actors[1], 230, 275, 3)   
  42.     draw_actor_param($game_actors[1], 230, 364, 4)   
  43.     draw_actor_param($game_actors[1], 230, 395, 5)   
  44.     draw_actor_param($game_actors[1], 230, 426, 6)   
  45.     draw_actor_param($game_actors[1], 230, 455, 7)   
  46.     draw_actor_hp($game_actors[1], 520, 237)
  47.     draw_actor_mp($game_actors[1], 520, 267)
  48.  
  49.     draw_text(283, 50, 300, 200,$game_variables[4995], 2)  #生日月
  50.  
  51.     draw_text(335, 50, 300, 200,$game_variables[4994], 2)  #生日日
  52.     change_color(text_color(6))
  53.     draw_text(250, 385, 300, 300,$game_party.gold, 2)
  54.  
  55.  
  56.   end
  57.   #--------------------------------------------------------------------------
  58.   # ● 绘制背景
  59.   #--------------------------------------------------------------------------
  60.   def draw_background
  61.     bitmap = Cache.picture("plain") #背景图
  62.     rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  63.     contents.blt(contents_width - bitmap.width, contents_height - bitmap.height, bitmap, rect, 255)
  64.     bitmap.dispose
  65.   end
  66. end
  67.  
  68. class Window_Variables2 < Window_Base
  69.   #--------------------------------------------------------------------------
  70.   # ● 初始化
  71.   #--------------------------------------------------------------------------
  72.   def initialize
  73.  
  74.     super(0, 0, 1024, 768)
  75.     self.opacity = 0
  76.     refresh
  77.   end
  78.  
  79.   #--------------------------------------------------------------------------
  80.   # ● 获取日期
  81.   #--------------------------------------------------------------------------
  82.   def date
  83.     return $game_variables[4994]
  84.   end  
  85.  
  86.   #--------------------------------------------------------------------------
  87.   # ● 获取月份
  88.   #--------------------------------------------------------------------------
  89.   def month
  90.     return $game_variables[4995]
  91.   end   
  92.   #--------------------------------------------------------------------------
  93.   # ● 刷新
  94.   #--------------------------------------------------------------------------
  95.   def refresh
  96.     contents.clear
  97.     draw_background
  98.  
  99.     draw_text(800, 0, 100, 100, "年", 2)
  100.     draw_text(845, 0, 100, 100, "月", 2)
  101.     draw_text(890, 0, 100, 100, "日", 2)
  102.  
  103.     draw_text(775, 0, 100, 100, "2000", 2)
  104.  
  105.     draw_text(818, 0, 100, 100, month, 2)
  106.  
  107.     draw_text(868, 0, 100, 100, date, 2)        
  108.     end  
  109.  
  110.   #--------------------------------------------------------------------------
  111.   # ● 绘制背景
  112.   #--------------------------------------------------------------------------
  113.   def draw_background
  114.     bitmap = Cache.picture("date") #背景图
  115.     rect = Rect.new(-800, -20, 1024, 768)
  116.     contents.blt(x, y, bitmap, rect, 255)
  117.     bitmap.dispose
  118.   end
  119. end
  120.  
  121. #==============================================================================
  122. # ■ Scene_Map
  123. #------------------------------------------------------------------------------
  124. #      地图生成窗口
  125. #==============================================================================
  126. class Scene_Map < Scene_Base
  127.   alias new_start start
  128.   def start
  129.     new_start
  130.  
  131.     @varia_window = Window_Variables.new
  132.     @varia_window.x = HPHUB_X
  133.     @varia_window.y = HPHUB_Y
  134.     @varia_window.visible = false
  135.  
  136.     @varia_window2 = Window_Variables2.new
  137.     @varia_window2.x = 0
  138.     @varia_window2.y = 0
  139.     @varia_window2.visible = true
  140.   end
  141.   #--------------------------------------------------------------------------
  142.   # ● 刷新
  143.   #--------------------------------------------------------------------------
  144.   alias new_update update
  145.   def update
  146.     new_update
  147.     #初始值
  148.     return if @show_hp_hud == $game_switches[HPHUB_SWITCH]
  149.     p $game_switches[HPHUB_SWITCH].to_s + "=>" + @show_hp_hud.to_s
  150.     if $game_switches[HPHUB_SWITCH] != true
  151.       @show_hp_hud = false
  152.     else
  153.       @show_hp_hud = true
  154.     end
  155.     #显示/隐藏执行
  156.     if @show_hp_hud == true
  157.       @varia_window.refresh
  158.       @varia_window.visible = true
  159.  
  160.     else
  161.       @varia_window.visible = false
  162.     end
  163.  
  164.     return else @show_hp_hud1 == $game_switches[HPHUB_SWITCH1]
  165.     p $game_switches[HPHUB_SWITCH1].to_s + "=>" + @show_hp_hud1.to_s
  166.     if $game_switches[HPHUB_SWITCH1] != true
  167.       @show_hp_hud1 = false
  168.     else
  169.       @show_hp_hud1 = true
  170.     end
  171.     #显示/隐藏执行
  172.     if @show_hp_hud1 == true
  173.       @varia_window2.refresh
  174.       @varia_window2.visible = true
  175.  
  176.     else
  177.       @varia_window2.visible = false
  178.     end
  179.   end
  180.   #--------------------------------------------------------------------------
  181.   # ● 释放
  182.   #--------------------------------------------------------------------------
  183.   alias new_terminate terminate
  184.   def terminate
  185.     @varia_window.dispose
  186.     new_terminate
  187. end
  188.   #--------------------------------------------------------------------------
  189.   # ● 关闭
  190.   #--------------------------------------------------------------------------
  191.   def close_varia_window
  192.     @varia_window.close
  193.     update until @varia_window.close?
  194.   end
  195.   def close_varia_window_1
  196.     @varia_window1.close
  197.     update until @varia_window1.close?  
  198.   end
  199. end

作者: j433463    时间: 2013-5-8 20:44
电脑例行扫毒中,浏览网页都卡得要命,暂时无法测试,等明天扫毒完毕后再找时间看了。
作者: raymondyrf    时间: 2013-5-8 20:48
j433463 发表于 2013-5-8 20:44
电脑例行扫毒中,浏览网页都卡得要命,暂时无法测试,等明天扫毒完毕后再找时间看了。 ...

好的好的,谢谢啦
作者: j433463    时间: 2013-5-9 20:26
本帖最后由 j433463 于 2013-5-9 20:29 编辑

试试吧,没有改什么地方,之前说底下有数字重叠主要就是第一个窗口没有 contents.clear
至于您说的月日问题,是因为 return 的那一行用法不对,您对照脚本看看改了哪些。

RUBY 代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Window_Variables
  4. #------------------------------------------------------------------------------
  5. #     地图上显示变量窗口
  6. #==============================================================================
  7. #  在不想要显示的地图备注栏中放上 <NOHPHUB> 就可以隐藏。
  8. #==============================================================================
  9.  
  10. HPHUB_X = 100 #显示变量窗口的 X 座标
  11. HPHUB_Y = 0 #显示变量窗口的 Y 座标
  12.  
  13. HPHUB_SWITCH = 100 #切换 显示 / 隐藏 窗口的开关ID
  14. HPHUB_SWITCH1 = 99 #切换 显示 / 隐藏 窗口的开关ID
  15.  
  16.  
  17.  
  18. class Window_Variables < Window_Base
  19.   #--------------------------------------------------------------------------
  20.   # ● 初始化
  21.   #--------------------------------------------------------------------------
  22.   def initialize
  23.  
  24.     super(100, 120, 740, 600)
  25.     self.opacity = 0
  26.     refresh
  27.   end
  28.  
  29.   #--------------------------------------------------------------------------
  30.   # ● 刷新
  31.   #--------------------------------------------------------------------------
  32.   def refresh
  33.     contents.clear
  34.     draw_background
  35.     draw_actor_name($game_actors[1], 330, 140)
  36.     draw_actor_nickname($game_actors[1], 300, 210)
  37.     draw_actor_level($game_actors[1], 330, 177)
  38.     draw_actor_exp($game_actors[1], 520, 177)
  39.     draw_actor_param($game_actors[1], 230, 335, 0)   
  40.     draw_actor_param($game_actors[1], 230, 304, 1)   
  41.     draw_actor_param($game_actors[1], 230, 245, 2)   
  42.     draw_actor_param($game_actors[1], 230, 275, 3)   
  43.     draw_actor_param($game_actors[1], 230, 364, 4)   
  44.     draw_actor_param($game_actors[1], 230, 395, 5)   
  45.     draw_actor_param($game_actors[1], 230, 426, 6)   
  46.     draw_actor_param($game_actors[1], 230, 455, 7)   
  47.     draw_actor_hp($game_actors[1], 520, 237)
  48.     draw_actor_mp($game_actors[1], 520, 267)
  49.  
  50.     draw_text(283, 50, 300, 200,$game_variables[4995], 2)  #生日月
  51.  
  52.     draw_text(335, 50, 300, 200,$game_variables[4994], 2)  #生日日
  53.     change_color(text_color(6))
  54.     draw_text(250, 385, 300, 300,$game_party.gold, 2)
  55.  
  56.  
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 绘制背景
  60.   #--------------------------------------------------------------------------
  61.   def draw_background
  62.     bitmap = Cache.picture("plain") #背景图
  63.     rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  64.     contents.blt(contents_width - bitmap.width, contents_height - bitmap.height, bitmap, rect, 255)
  65.     bitmap.dispose
  66.   end
  67. end
  68.  
  69. class Window_Variables2 < Window_Base
  70.   #--------------------------------------------------------------------------
  71.   # ● 初始化
  72.   #--------------------------------------------------------------------------
  73.   def initialize
  74.  
  75.     super(0, 0, 1024, 768)
  76.     self.opacity = 0
  77.     refresh
  78.   end
  79.  
  80.   #--------------------------------------------------------------------------
  81.   # ● 获取日期
  82.   #--------------------------------------------------------------------------
  83.   def date
  84.     return $game_variables[4994]
  85.   end  
  86.  
  87.   #--------------------------------------------------------------------------
  88.   # ● 获取月份
  89.   #--------------------------------------------------------------------------
  90.   def month
  91.     return $game_variables[4995]
  92.   end   
  93.   #--------------------------------------------------------------------------
  94.   # ● 刷新
  95.   #--------------------------------------------------------------------------
  96.   def refresh
  97.     contents.clear
  98.     draw_background
  99.  
  100.     draw_text(800, 0, 100, 100, "年", 2)
  101.     draw_text(845, 0, 100, 100, "月", 2)
  102.     draw_text(890, 0, 100, 100, "日", 2)
  103.  
  104.     draw_text(775, 0, 100, 100, "2000", 2)
  105.  
  106.     draw_text(818, 0, 100, 100, month, 2)
  107.  
  108.     draw_text(868, 0, 100, 100, date, 2)        
  109.     end  
  110.  
  111.   #--------------------------------------------------------------------------
  112.   # ● 绘制背景
  113.   #--------------------------------------------------------------------------
  114.   def draw_background
  115.     bitmap = Cache.picture("date") #背景图
  116.     rect = Rect.new(-800, -20, 1024, 768)
  117.     contents.blt(x, y, bitmap, rect, 255)
  118.     bitmap.dispose
  119.   end
  120. end
  121.  
  122. #==============================================================================
  123. # ■ Scene_Map
  124. #------------------------------------------------------------------------------
  125. #      地图生成窗口
  126. #==============================================================================
  127. class Scene_Map < Scene_Base
  128.   alias new_start start
  129.   def start
  130.     new_start
  131.  
  132.     @varia_window = Window_Variables.new
  133.     @varia_window.x = HPHUB_X
  134.     @varia_window.y = HPHUB_Y
  135.     @varia_window.visible = false
  136.  
  137.     @varia_window2 = Window_Variables2.new
  138.     @varia_window2.x = 0
  139.     @varia_window2.y = 0
  140.     @varia_window2.visible = true
  141.   end
  142.   #--------------------------------------------------------------------------
  143.   # ● 刷新
  144.   #--------------------------------------------------------------------------
  145.   alias new_update update
  146.   def update
  147.     new_update
  148.     #初始值
  149.     return if @show_hp_hud == $game_switches[HPHUB_SWITCH] && @show_hp_hud1 == $game_switches[HPHUB_SWITCH1]
  150.     p $game_switches[HPHUB_SWITCH].to_s + "=>" + @show_hp_hud.to_s
  151.     if $game_switches[HPHUB_SWITCH] != true
  152.       @show_hp_hud = false
  153.     else
  154.       @show_hp_hud = true
  155.     end
  156.     #显示/隐藏执行
  157.     if @show_hp_hud == true
  158.       @varia_window.refresh
  159.       @varia_window.visible = true
  160.     else
  161.       @varia_window.visible = false
  162.     end
  163.  
  164.     p $game_switches[HPHUB_SWITCH1].to_s + "=>" + @show_hp_hud1.to_s
  165.     if $game_switches[HPHUB_SWITCH1] != true
  166.       @show_hp_hud1 = false
  167.     else
  168.       @show_hp_hud1 = true
  169.     end
  170.     #显示/隐藏执行
  171.     if @show_hp_hud1 == true
  172.       @varia_window2.refresh
  173.       @varia_window2.visible = true
  174.      else
  175.       @varia_window2.visible = false
  176.     end
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # ● 释放
  180.   #--------------------------------------------------------------------------
  181.   alias new_terminate terminate
  182.   def terminate
  183.     @varia_window.dispose
  184.     new_terminate
  185. end
  186.   #--------------------------------------------------------------------------
  187.   # ● 关闭
  188.   #--------------------------------------------------------------------------
  189.   def close_varia_window
  190.     @varia_window.close
  191.     update until @varia_window.close?
  192.   end
  193.   def close_varia_window_1
  194.     @varia_window1.close
  195.     update until @varia_window1.close?  
  196.   end
  197. end

作者: raymondyrf    时间: 2013-5-10 00:32
j433463 发表于 2013-5-9 20:26
试试吧,没有改什么地方,之前说底下有数字重叠主要就是第一个窗口没有 contents.clear
至于您说的月日问题 ...

好的好的,感谢您了!!
我看看以后还有没有什么问题直接@ 你了,谢谢了真的




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