Project1

标题: 按照论坛的帖子制作Scene_menu的背景,但是始终不成功 [打印本页]

作者: huhumaru    时间: 2013-3-29 17:12
标题: 按照论坛的帖子制作Scene_menu的背景,但是始终不成功
本帖最后由 huhumaru 于 2013-3-30 11:54 编辑

(工程下载地址在最后)
如题,我是按照这个帖子http://rpg.blue/thread-226400-1-1.html 最后的部分来制作背景的。
我想达到的效果是,最下面一层是游戏进行中的画面,也就是Scene_MenuBase脚本的第29行调用的@background_sprite.bitmap = SceneManager.background_bitmap 这个画面

然后在这一层的上面新建一层,调用一张PNG图片,

最上面才是各个窗口。

我按照教程里把以下这段代码粘贴到Scene_Menu里面,
RUBY 代码复制
  1. class Window_background < Window_Base
  2.   #--------------------------------------------------------------------------
  3.   # ● 初始化对象
  4.   #--------------------------------------------------------------------------
  5.   def initialize
  6.     super(0, 0, 544,416)
  7.     self.opacity = 0
  8.     refresh
  9.   end
  10.   #--------------------------------------------------------------------------
  11.   # ● 刷新
  12.   #--------------------------------------------------------------------------
  13.   def refresh
  14.     contents.clear
  15.     bitmap = Cache.load_bitmap("Graphics/System/","Menubackground")
  16.     rect = Rect.new(0, 0, 544,416)   
  17.     contents.blt(0,0, bitmap, rect, 255)
  18.     bitmap.dispose
  19.   end
  20. end

然后命名为Menubackground的PNG图片也放到对应的System文件夹下了,但是始终这张图片显示不出来。

求高人指点一下到底问题出在哪里。


我的Scene_Menu的代码如下:
RUBY 代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Scene_Menu
  4. #------------------------------------------------------------------------------
  5. #  菜单画面
  6. #==============================================================================
  7.  
  8. class Window_background < Window_Base
  9.   #--------------------------------------------------------------------------
  10.   # ● 初始化对象
  11.   #--------------------------------------------------------------------------
  12.   def initialize
  13.     super(0, 0, 544,416)
  14.     self.opacity = 0
  15.     refresh
  16.   end
  17.   #--------------------------------------------------------------------------
  18.   # ● 刷新
  19.   #--------------------------------------------------------------------------
  20.   def refresh
  21.     contents.clear
  22.     bitmap = Cache.load_bitmap("Graphics/System/","Menubackground")
  23.     rect = Rect.new(0, 0, 544,416)   
  24.     contents.blt(0,0, bitmap, rect, 255)
  25.     bitmap.dispose
  26.   end
  27. end
  28.  
  29. class Scene_Menu < Scene_MenuBase
  30.   #--------------------------------------------------------------------------
  31.   # ● 开始处理
  32.   #--------------------------------------------------------------------------
  33.   def start
  34.     super
  35.     create_command_window
  36.     create_gold_window
  37.     create_status_window
  38.     create_MenuHelp_window
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   # ● 生成帮助窗口
  42.   #--------------------------------------------------------------------------
  43.   def create_MenuHelp_window
  44.     @Menuhelp_window = Window_MenuHelp.new
  45.     @Menuhelp_window.x = 0
  46.     @Menuhelp_window.y = 0
  47.   end
  48.   #--------------------------------------------------------------------------
  49.   # ● 生成指令窗口
  50.   #--------------------------------------------------------------------------
  51.   def create_command_window
  52.     @command_window = Window_MenuCommand.new
  53.     @command_window.x = 0
  54.     @command_window.y = 48
  55.     @command_window.set_handler(:item,      method(:command_item))
  56.     @command_window.set_handler(:skill,     method(:command_personal))
  57.     @command_window.set_handler(:equip,     method(:command_personal))
  58.     @command_window.set_handler(:status,    method(:command_personal))
  59.     @command_window.set_handler(:formation, method(:command_formation))
  60.     @command_window.set_handler(:save,      method(:command_save))
  61.     @command_window.set_handler(:game_end,  method(:command_game_end))
  62.     @command_window.set_handler(:cancel,    method(:return_scene))
  63.   end
  64.   #--------------------------------------------------------------------------
  65.   # ● 生成金钱窗口
  66.   #--------------------------------------------------------------------------
  67.   def create_gold_window
  68.     @gold_window = Window_Gold.new
  69.     @gold_window.x = 0
  70.     @gold_window.y = Graphics.height - @gold_window.height
  71.   end
  72.   #--------------------------------------------------------------------------
  73.   # ● 生成状态窗口
  74.   #--------------------------------------------------------------------------
  75.   def create_status_window
  76.     #@status_window = Window_MenuStatus.new(@command_window.width, 0)
  77.     @status_window = Window_MenuStatus.new(@command_window.width, 48)
  78.   end
  79.   #--------------------------------------------------------------------------
  80.   # ● 指令“物品”
  81.   #--------------------------------------------------------------------------
  82.   def command_item
  83.     SceneManager.call(Scene_Item)
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # ● 指令“技能”“装备”“状态”
  87.   #--------------------------------------------------------------------------
  88.   def command_personal
  89.     @status_window.select_last
  90.     @status_window.activate
  91.     @status_window.set_handler(:ok,     method(:on_personal_ok))
  92.     @status_window.set_handler(:cancel, method(:on_personal_cancel))
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ● 指令“整队”
  96.   #--------------------------------------------------------------------------
  97.   def command_formation
  98.     @status_window.select_last
  99.     @status_window.activate
  100.     @status_window.set_handler(:ok,     method(:on_formation_ok))
  101.     @status_window.set_handler(:cancel, method(:on_formation_cancel))
  102.   end
  103.   #--------------------------------------------------------------------------
  104.   # ● 指令“存档”
  105.   #--------------------------------------------------------------------------
  106.   def command_save
  107.     SceneManager.call(Scene_Save)
  108.   end
  109.   #--------------------------------------------------------------------------
  110.   # ● 指令“结束游戏”
  111.   #--------------------------------------------------------------------------
  112.   def command_game_end
  113.     SceneManager.call(Scene_End)
  114.   end
  115.   #--------------------------------------------------------------------------
  116.   # ● 个人指令“确定”
  117.   #--------------------------------------------------------------------------
  118.   def on_personal_ok
  119.     case @command_window.current_symbol
  120.     when :skill
  121.       SceneManager.call(Scene_Skill)
  122.     when :equip
  123.       SceneManager.call(Scene_Equip)
  124.     when :status
  125.       SceneManager.call(Scene_Status)
  126.     end
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # ● 个人指令“取消”
  130.   #--------------------------------------------------------------------------
  131.   def on_personal_cancel
  132.     @status_window.unselect
  133.     @command_window.activate
  134.   end
  135.   #--------------------------------------------------------------------------
  136.   # ● 整队“确定”
  137.   #--------------------------------------------------------------------------
  138.   def on_formation_ok
  139.     if @status_window.pending_index >= 0
  140.       $game_party.swap_order(@status_window.index,
  141.                              @status_window.pending_index)
  142.       @status_window.pending_index = -1
  143.       @status_window.redraw_item(@status_window.index)
  144.     else
  145.       @status_window.pending_index = @status_window.index
  146.     end
  147.     @status_window.activate
  148.   end
  149.   #--------------------------------------------------------------------------
  150.   # ● 整队“取消”
  151.   #--------------------------------------------------------------------------
  152.   def on_formation_cancel
  153.     if @status_window.pending_index >= 0
  154.       @status_window.pending_index = -1
  155.       @status_window.activate
  156.     else
  157.       @status_window.unselect
  158.       @command_window.activate
  159.     end
  160.   end
  161. end


工程下载地址:ht(防止和谐)tp://dl.vmall.com/c0dddka961
作者: 千昭    时间: 2013-3-29 17:25
自家论坛的地址和谐什么啊   麻烦你恢复下
作者: 喵呜喵5    时间: 2013-3-29 20:29
除了修改这段语句外你的游戏中还有没有添加了什么其他的菜单扩展脚本?

建议把工程发上来……
作者: huhumaru    时间: 2013-3-29 21:10
喵呜喵5 发表于 2013-3-29 20:29
除了修改这段语句外你的游戏中还有没有添加了什么其他的菜单扩展脚本?

建议把工程发上来…… ...

求帮助,我已经把工程传上来啦~~~~
作者: 喵呜喵5    时间: 2013-3-29 21:47
Scene_MenuBase第29、30行:
@background_sprite.bitmap = SceneManager.background_bitmap
@background_sprite.color.set(16, 16, 16, 128)
改成:
@background_sprite.bitmap = Cache.system("Menubackground")
@background_sprite.color.set(0, 0, 0, 0)


作者: huhumaru    时间: 2013-3-30 00:15
喵呜喵5 发表于 2013-3-29 21:47
Scene_MenuBase第29、30行:
@background_sprite.bitmap = SceneManager.background_bitmap
@background_sp ...

感谢您的回复,但是人家要的不是这样的效果啦。

如果用PHOTOSHOP里面的图层来做比喻的话,我想要的效果是:

1、最下面的背景层是地图模糊后的图,也就是Scene_MenuBase里面的
RUBY 代码复制
  1. def create_background
  2.     @background_sprite = Sprite.new
  3.     @background_sprite.bitmap = SceneManager.background_bitmap
  4.     @background_sprite.color.set(16, 16, 16, 128)
  5.   end

这一行

2、地图图层上面是第二个图层,我的思路是新建一个sprite,然后调用一张png图片,但是不知道具体的做法

3、第三层才是各个窗口(已经把self.opacity = 0 )这句加上了

作者: j433463    时间: 2013-3-30 00:50
画图的方法是读取位图
  1. bitmap = Cache.load_bitmap("Graphics/Party/", player_filename)
复制代码
用 load_bitmap 或 system 或 Picture 都看您自己的考量,反正就是 Cache 到 bitmap 中.

然后建立一个显示描绘此位图的矩形
  1. rect = Rect.new(0, 0, bitmap.width, bitmap.height)
复制代码
基本上这一行可以照搬不用改的。

再就是开始描绘图形了
  1. contents.blt(x, y, bitmap, rect, 不透明度)
复制代码
这个依照您的需要,改 x, y 座标,和不透明度,一般常用是 255 完全不透明。

最后在画完图之后,把 bitmap 给 dispose 清掉,免残留
  1. bitmap.dispose
复制代码

作者: huhumaru    时间: 2013-3-30 08:08
本帖最后由 huhumaru 于 2013-3-30 08:22 编辑
j433463 发表于 2013-3-30 00:50
画图的方法是读取位图用 load_bitmap 或 system 或 Picture 都看您自己的考量,反正就是 Cache 到 bitmap  ...


非常感谢,我按照您的方法把图片建立在Window_MenuStatus中了,但是又出现一个新的问题,图片把窗口里本该显示的内容盖住了,请问应该怎么设置Z值呢?(追加:我重新理了一下思路,貌似这样draw出来的图像是在窗口的边框加上padding里面的,我想要的是图片整个充当窗口的背景,包括边框和padding的部分)

还有个问题就是,只能在窗口里绘图,在scene_menubase里绘图的话会提示我content没有定义,我不知道怎么定义

以下是代码和截图:

RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 获取窗口背景图
  3.   #--------------------------------------------------------------------------
  4.   def wa
  5.     bitmap = Cache.load_bitmap("Graphics/WindowBack/", "back01")
  6.     rect = Rect.new(0, 0,bitmap.width, bitmap.height)
  7.     contents.blt(0, 0, bitmap, rect, 255)
  8.     bitmap.dispose
  9.   end


RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 绘制项目
  3.   #--------------------------------------------------------------------------
  4.   def draw_item(index)
  5.     wa
  6.     actor = $game_party.members[index]
  7.     enabled = $game_party.battle_members.include?(actor)
  8.     rect = item_rect(index)
  9.     draw_item_background(index)
  10.     draw_actor_HalfBody(actor, rect.x, rect.y, enabled)
  11.     draw_actor_name(actor,rect.x+35, rect.y+279)
  12.     draw_actor_icons(actor,rect.x+35,rect.y+233+line_height*2)
  13.     draw_actor_level(actor,rect.x+103, rect.y+233+line_height*2)
  14.     draw_actor_hp(actor,rect.x+35, rect.y+233+line_height*3)
  15.   end






作者: j433463    时间: 2013-3-30 08:50
本帖最后由 j433463 于 2013-3-30 08:53 编辑

如果是要当整个窗口的背景图,方法又不一样了,我拿主菜单为例,图片是整个主菜单的背景,所以要在 Scene_Menu 来改,若是状态页,则是改 Scene_Status ,依此类推。

首先,在 Scene_Menu 的开始处理 def start 中,super 的下面加一行:
  1.     create_background
复制代码
就是要在主菜单开始时生成背景,然后在 def start 的 end 后面加入这个生成背景的主程序:
  1.   #--------------------------------------------------------------------------
  2.   # ● 生成背景
  3.   #--------------------------------------------------------------------------
  4.   def create_background
  5.     @background_sprite = Sprite.new
  6.     @background_sprite.bitmap = Cache.load_bitmap("Graphics/Pictures/","1-032-72")
  7.     @background_sprite.color.set(0, 0, 0, 0)
  8.   end
  9.   #--------------------------------------------------------------------------
  10.   # ● 结束背景
  11.   #--------------------------------------------------------------------------
  12.   def dispose_background
  13.     @background_sprite.dispose
  14.   end
复制代码
这主程序分成两个部份,一个是生成时的处理,一个是菜单结束时,背景图的释放处理,后者不必多作什么,菜单结束时会去执行 dispose_ 开头的。
(更正一下,这是因为在 Scene_MenuBase 中有定义 def terminate 结束时的处理了)

从这个程序中,我回答您之前的问题,您看到生成背景的方式了,这儿就用到建立 Sprite.new 方法,并且有给一个 @background_sprite 变量名,
所以像这样绘的图就可以用 @background_sprite.z = n 来指定 z 的值。

您也可不去改动默认脚本,用下面我这个方式,在 Main 前插入这样的脚本:
  1. # 菜单
  2. class Scene_Menu < Scene_MenuBase
  3.    #--------------------------------------------------------------------------
  4.   # ● 生成背景
  5.   #--------------------------------------------------------------------------
  6.   def create_background
  7.     @background_sprite = Sprite.new
  8.     @background_sprite.bitmap = Cache.load_bitmap("Graphics/Titles1/","star_01")
  9.     @background_sprite.color.set(0, 0, 0, 0)
  10.   end
  11.   #--------------------------------------------------------------------------
  12.   # ● 结束处理
  13.   #--------------------------------------------------------------------------
  14.   def terminate
  15.     super
  16.     dispose_background
  17.   end
  18.   #--------------------------------------------------------------------------
  19.   # ● 结束背景
  20.   #--------------------------------------------------------------------------
  21.   def dispose_background
  22.     @background_sprite.dispose
  23.   end
  24. end

  25. #状态
  26. class Scene_Status < Scene_MenuBase
  27.   #--------------------------------------------------------------------------
  28.   # ● 生成背景
  29.   #--------------------------------------------------------------------------
  30.   def create_background
  31.     @background_sprite = Sprite.new
  32.     @background_sprite.bitmap = Cache.load_bitmap("Graphics/Titles1/","DATA20_0852")
  33.     @background_sprite.color.set(0, 0, 0, 0)
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   # ● 结束处理
  37.   #--------------------------------------------------------------------------
  38.   def terminate
  39.     super
  40.     dispose_background
  41.   end
  42.   #--------------------------------------------------------------------------
  43.   # ● 结束背景
  44.   #--------------------------------------------------------------------------
  45.   def dispose_background
  46.     @background_sprite.dispose
  47.   end
  48. end

  49. #物品
  50. class Scene_Item < Scene_ItemBase
  51.   #--------------------------------------------------------------------------
  52.   # ● 生成背景
  53.   #--------------------------------------------------------------------------
  54.   def create_background
  55.     @background_sprite = Sprite.new
  56.     @background_sprite.bitmap = Cache.load_bitmap("Graphics/Titles1/","087")
  57.     @background_sprite.color.set(0, 0, 0, 0)
  58.   end
  59.   #--------------------------------------------------------------------------
  60.   # ● 结束处理
  61.   #--------------------------------------------------------------------------
  62.   def terminate
  63.     super
  64.     dispose_background
  65.   end
  66.   #--------------------------------------------------------------------------
  67.   # ● 结束背景
  68.   #--------------------------------------------------------------------------
  69.   def dispose_background
  70.     @background_sprite.dispose
  71.   end
  72. end

  73. #技能
  74. class Scene_Skill < Scene_ItemBase
  75.   #--------------------------------------------------------------------------
  76.   # ● 生成背景
  77.   #--------------------------------------------------------------------------
  78.   def create_background
  79.     @background_sprite = Sprite.new
  80.     @background_sprite.bitmap = Cache.load_bitmap("Graphics/Titles1/","043-Cave01")
  81.     @background_sprite.color.set(0, 0, 0, 0)
  82.   end
  83.   #--------------------------------------------------------------------------
  84.   # ● 结束处理
  85.   #--------------------------------------------------------------------------
  86.   def terminate
  87.     super
  88.     dispose_background
  89.   end
  90.   #--------------------------------------------------------------------------
  91.   # ● 结束背景
  92.   #--------------------------------------------------------------------------
  93.   def dispose_background
  94.     @background_sprite.dispose
  95.   end
  96. end

  97. #装备
  98. class Scene_Equip < Scene_MenuBase
  99.   #--------------------------------------------------------------------------
  100.   # ● 生成背景
  101.   #--------------------------------------------------------------------------
  102.   def create_background
  103.     @background_sprite = Sprite.new
  104.     @background_sprite.bitmap = Cache.load_bitmap("Graphics/Titles1/","046-Cave04")
  105.     @background_sprite.color.set(0, 0, 0, 0)
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ● 结束处理
  109.   #--------------------------------------------------------------------------
  110.   def terminate
  111.     super
  112.     dispose_background
  113.   end
  114.   #--------------------------------------------------------------------------
  115.   # ● 结束背景
  116.   #--------------------------------------------------------------------------
  117.   def dispose_background
  118.     @background_sprite.dispose
  119.   end
  120. end
复制代码
其实只是把原本要放在默认脚本中集中在一个脚本内而已,好处是要删改比较方便,呵呵~~
作者: huhumaru    时间: 2013-3-30 09:34
j433463 发表于 2013-3-30 08:50
如果是要当整个窗口的背景图,方法又不一样了,我拿主菜单为例,图片是整个主菜单的背景,所以要在 Scene_M ...

谢谢您的回复,从您的代码里我知道这种创建背景的方法了。
不过要按照我之前设想的效果的话,您的这种方法实际上是用新的背景图来取代原有的地图背景图。所以我在想可不可以用这样一种思路,就是分别在各个窗口调用窗口的独立背景。按照您给的方法可以给物品、装备、技能等scene创建背景,但scene_menu包含了menu_command、menu_status、Gold三个窗口,这三个窗口在scene类中是没有单独的scene的,那是不是要新建属于他们的单独的scene呢?

纯好奇而提问,其实到了这步窗口的效果也达到了。我主要是想从这些实例的修改来慢慢熟悉ruby,我没有程序基础,稍微有点头疼,呵呵。
作者: j433463    时间: 2013-3-30 09:59
本帖最后由 j433463 于 2013-3-30 10:41 编辑

我想您误会了,背景图不是取代,而是画上去的,可以指定 z 值让一个盖在另一个上面,不会影响到菜单本身,我个的例子截图:



您可以看到,菜单的背景 1-032-72.png 存在,而另一个弓箭手的半身像盖在背景上面,却不影响到菜单上的队伍状态内容,

这整个 Scene_Menu 的修改后内容是:

RUBY 代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Scene_Menu
  4. #------------------------------------------------------------------------------
  5. #  选单画面
  6. #==============================================================================
  7.  
  8. class Scene_Menu < Scene_MenuBase
  9.   #--------------------------------------------------------------------------
  10.   # ● 开始处理
  11.   #--------------------------------------------------------------------------
  12.   def start
  13.     super
  14.     create_background
  15.     create_background2
  16.     create_command_window
  17.     create_gold_window
  18.     create_status_window
  19.   end
  20.   #--------------------------------------------------------------------------
  21.   # ● 生成背景
  22.   #--------------------------------------------------------------------------
  23.   def create_background
  24.     @background_sprite = Sprite.new
  25.     @background_sprite.bitmap = Cache.load_bitmap("Graphics/Pictures/","1-032-72")
  26.     @background_sprite.color.set(0, 0, 0, 0)
  27.   end
  28.   #--------------------------------------------------------------------------
  29.   # ● 生成背景
  30.   #--------------------------------------------------------------------------
  31.   def create_background2
  32.     @background_sprite2 = Sprite.new
  33.     @background_sprite2.bitmap = Cache.load_bitmap("Graphics/Pictures/","player_06")
  34.     @background_sprite2.color.set(0, 0, 0, 0)
  35.     @background_sprite2.z += 1
  36.     @background_sprite2.x = Graphics.width - @background_sprite2.width
  37.     @background_sprite2.y = Graphics.height - @background_sprite2.height
  38.   end
  39.   #--------------------------------------------------------------------------
  40.   # ● 结束背景
  41.   #--------------------------------------------------------------------------
  42.   def dispose_background
  43.     @background_sprite2.dispose
  44.     @background_sprite.dispose
  45.   end  
  46.  
  47.   #--------------------------------------------------------------------------
  48.   # ● 生成指令视窗
  49.   #--------------------------------------------------------------------------
  50.   def create_command_window
  51.     @command_window = Window_MenuCommand.new
  52.     @command_window.set_handler(:item,      method(:command_item))
  53.     @command_window.set_handler(:skill,     method(:command_personal))
  54.     @command_window.set_handler(:equip,     method(:command_personal))
  55.     @command_window.set_handler(:status,    method(:command_personal))
  56.     @command_window.set_handler(:formation, method(:command_formation))
  57.     @command_window.set_handler(:save,      method(:command_save))
  58.     @command_window.set_handler(:game_end,  method(:command_game_end))
  59.     @command_window.set_handler(:cancel,    method(:return_scene))
  60.     @command_window.y = 100
  61.   end
  62.   #--------------------------------------------------------------------------
  63.   # ● 生成金钱视窗
  64.   #--------------------------------------------------------------------------
  65.   def create_gold_window
  66.     @gold_window = Window_Gold.new
  67.     @gold_window.x = 0
  68.     @gold_window.y = Graphics.height - @gold_window.height
  69.   end
  70.   #--------------------------------------------------------------------------
  71.   # ● 生成状态视窗
  72.   #--------------------------------------------------------------------------
  73.   def create_status_window
  74.     @status_window = Window_MenuStatus.new(@command_window.width, 0)
  75.     @status_window.y = 62
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   # ● 指令“物品”
  79.   #--------------------------------------------------------------------------
  80.   def command_item
  81.     SceneManager.call(Scene_Item)
  82.   end
  83.   #--------------------------------------------------------------------------
  84.   # ● 指令“技能”“装备”“状态”
  85.   #--------------------------------------------------------------------------
  86.   def command_personal
  87.     @status_window.select_last
  88.     @status_window.activate
  89.     @status_window.set_handler(:ok,     method(:on_personal_ok))
  90.     @status_window.set_handler(:cancel, method(:on_personal_cancel))
  91.   end
  92.   #--------------------------------------------------------------------------
  93.   # ● 指令“整队”
  94.   #--------------------------------------------------------------------------
  95.   def command_formation
  96.     @status_window.select_last
  97.     @status_window.activate
  98.     @status_window.set_handler(:ok,     method(:on_formation_ok))
  99.     @status_window.set_handler(:cancel, method(:on_formation_cancel))
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ● 指令“存档”
  103.   #--------------------------------------------------------------------------
  104.   def command_save
  105.     SceneManager.call(Scene_Save)
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ● 指令“结束游戏”
  109.   #--------------------------------------------------------------------------
  110.   def command_game_end
  111.     SceneManager.call(Scene_End)
  112.   end
  113.   #--------------------------------------------------------------------------
  114.   # ● 个人指令“确定”
  115.   #--------------------------------------------------------------------------
  116.   def on_personal_ok
  117.     case @command_window.current_symbol
  118.     when :skill
  119.       SceneManager.call(Scene_Skill)
  120.     when :equip
  121.       SceneManager.call(Scene_Equip)
  122.     when :status
  123.       SceneManager.call(Scene_Status)
  124.     end
  125.   end
  126.   #--------------------------------------------------------------------------
  127.   # ● 个人指令“取消”
  128.   #--------------------------------------------------------------------------
  129.   def on_personal_cancel
  130.     @status_window.unselect
  131.     @command_window.activate
  132.   end
  133.   #--------------------------------------------------------------------------
  134.   # ● 整队“确定”
  135.   #--------------------------------------------------------------------------
  136.   def on_formation_ok
  137.     if @status_window.pending_index >= 0
  138.       $game_party.swap_order(@status_window.index,
  139.                              @status_window.pending_index)
  140.       @status_window.pending_index = -1
  141.       @status_window.redraw_item(@status_window.index)
  142.     else
  143.       @status_window.pending_index = @status_window.index
  144.     end
  145.     @status_window.activate
  146.   end
  147.   #--------------------------------------------------------------------------
  148.   # ● 整队“取消”
  149.   #--------------------------------------------------------------------------
  150.   def on_formation_cancel
  151.     if @status_window.pending_index >= 0
  152.       @status_window.pending_index = -1
  153.       @status_window.activate
  154.     else
  155.       @status_window.unselect
  156.       @command_window.activate
  157.     end
  158.   end
  159. end


也就是说,您可以建无数个图片在背景上,只要设好每一张图片的 z 值,而且要保证每一张图的背景是透明的,可以看到底下的图。

代码中只是加了 create_background2 多做一次背景生成,并且设定一下位置和 z 值而已,
如果没记错,窗口默认的 z 值好像是 100 吧?所以背景的 z 值有不少空间可以发挥。

之所以您原来的地图背景会被取代,只是因为我用的背景名 @background_sprite 相同而已,如果您用了教程的方法建立了地图背景,
把它当第一个背景,只需要把我的那个背景生成名称改一下,就像我这例子中第二张背景图,用 @background_sprite2 就可以和地图背景共存,
并没有取代的问题。
作者: huhumaru    时间: 2013-3-30 11:54
本帖最后由 huhumaru 于 2013-3-30 11:55 编辑
j433463 发表于 2013-3-30 09:59
我想您误会了,背景图不是取代,而是画上去的,可以指定 z 值让一个盖在另一个上面,不会影响到菜单本身, ...


原来是我用了同样的变量名啊,我测试了下,的确如您所说。真是太感谢了!
两种窗口效果如图,一个是不透明一个是半透明。我想我下一步应该是修改光标样子了。再次感谢您,我把这个帖子修改为已解决吧。



作者: 后知后觉    时间: 2013-3-30 17:57
huhumaru 发表于 2013-3-30 09:34
谢谢您的回复,从您的代码里我知道这种创建背景的方法了。
不过要按照我之前设想的效果的话,您的这种方 ...

因为他用的变量名和函数名是默认脚本用的 所以默认的那层被替换掉了  




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