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

Project1

 找回密码
 注册会员
搜索

按照论坛的帖子制作Scene_menu的背景,但是始终不成功

查看数: 3839 | 评论数: 12 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2013-3-29 17:12

正文摘要:

本帖最后由 huhumaru 于 2013-3-30 11:54 编辑 (工程下载地址在最后) 如题,我是按照这个帖子http://rpg.blue/thread-226400-1-1.html 最后的部分来制作背景的。 我想达到的效果是,最下面一层是游戏进行中的画 ...

回复

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

因为他用的变量名和函数名是默认脚本用的 所以默认的那层被替换掉了  
j433463 发表于 2013-3-30 09:59:20
本帖最后由 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 09:34:25
j433463 发表于 2013-3-30 08:50
如果是要当整个窗口的背景图,方法又不一样了,我拿主菜单为例,图片是整个主菜单的背景,所以要在 Scene_M ...

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

纯好奇而提问,其实到了这步窗口的效果也达到了。我主要是想从这些实例的修改来慢慢熟悉ruby,我没有程序基础,稍微有点头疼,呵呵。
j433463 发表于 2013-3-30 08:50:40
本帖最后由 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
复制代码
其实只是把原本要放在默认脚本中集中在一个脚本内而已,好处是要删改比较方便,呵呵~~
j433463 发表于 2013-3-30 00:50:04
画图的方法是读取位图
  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 00:15:07
喵呜喵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 )这句加上了
喵呜喵5 发表于 2013-3-29 21:47:35
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)

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

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

GMT+8, 2024-11-29 13:51

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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