幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1939|回复: 2

[RMXP] RMXP请问如何实现图片窗口背景啊 就象VX一样 我这有个脚本

[复制链接]

9

主题

26

帖子

237

积分

③业余

积分
237
发表于 2009-2-26 14:30:33 | 显示全部楼层 |阅读模式
怎么让XP实现 以下 图片窗口背景



  1. #=============================================================================
  2. #图片窗口背景
  3. #作者:kissye
  4. #
  5. #注意事项
  6. #使用这个脚本后,Window类里不能再用@skin变量
  7. #
  8. #使用方法
  9. #自己写窗口的时候,令
  10. #self.skin = Cache.文件夹名字("图片名字")
  11. #或者在外部更改,令
  12. #变量 = 窗口.new
  13. #变量.skin = Cache.文件夹名字("图片名字")
  14. #
  15. #更新
  16. #更改Skin为Sprite_Base子类,于是所有Sprite_Base类属性方法包括动画都可以直接调用
  17. #不过真的有需要咩......
  18. #
  19. #Sprite属性举例,如更改图片透明度设置,令
  20. #self.skin.opacity = 透明度
  21. #此外可以设置图片大小,默认与窗口同样大小.
  22. #self.skin.size(x方向变化, y方向变化)
  23. #此数字可以为负.例如
  24. #self.skin.size(-5, -5)
  25. #那么图片大小比窗口上下左右都小了5像素
  26. #注意调用方式和我上次写的不一样
  27. #应该不会再增加什么功能了,反正我自己够用了已经
  28. #=============================================================================
  29. class Skin < Sprite_Base
  30.   def initialize(bitmap, window)
  31.     super(window.viewport)
  32.     @sx = 0
  33.     @sy = 0
  34.     @rectbitmap = Rect.new(0, 0, bitmap.width, bitmap.height)
  35.     @rectself = Rect.new(0, 0, window.width, window.height)
  36.     @origwidth = window.width
  37.     @origheight = window.height
  38.     self.x = window.x
  39.     self.yy = window.y
  40.     self.z = window.z - 10
  41.     self.visible = window.visible
  42.     self.openness = window.openness
  43.     @bitmap = bitmap
  44.     drawback
  45.   end
  46.   #---------------------------------------------------------------------------
  47.   def drawback
  48.     unless @rectself.width == 0 or @rectself.height == 0
  49.       if self.bitmap != nil
  50.         self.bitmap.dispose
  51.       end
  52.       self.bitmap = Bitmap.new(@rectself.width, @rectself.height)
  53.       self.bitmap.stretch_blt(@rectself, @bitmap, @rectbitmap)
  54.     end
  55.   end
  56.   #------------------------------------------------------------------------
  57.   def x=(value)
  58.     @origx = value
  59.     value -= @sx
  60.     super(value)
  61.   end
  62.   #------------------------------------------------------------------------
  63.   def yy=(value)
  64.     @origy = value
  65.     value -= @sy
  66.     self.y = value
  67.   end
  68.   #-------------------------------------------------------------------------
  69.   def width=(value)
  70.     @rectself.width = value + @sx * 2
  71.     @origwidth = value
  72.     drawback
  73.   end
  74.   #-------------------------------------------------------------------------
  75.   def height=(value)
  76.     @rectself.height = value + @sy * 2
  77.     @origheight = value
  78.     drawback
  79.   end
  80.   #-------------------------------------------------------------------------
  81.   def dispose
  82.     self.bitmap.dispose
  83.     super
  84.   end
  85.   #---------------------------------------------------------------------------
  86.   def z=(value)
  87.     value -= 10
  88.     super(value)
  89.   end
  90.   #--------------------------------------------------------------------------
  91.   def openness=(value)
  92.     self.zoom_y = value / 255.0
  93.     self.y = (1.0 - self.zoom_y) * @rectself.height / 2 + @origy - @sy
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   def size(x = 0, y = 0)
  97.     @sx = x
  98.     @sy = y
  99.     self.x = @origx
  100.     self.y = @origy - y
  101.     @rectself.width = @origwidth + x * 2
  102.     @rectself.height = @origheight + y * 2
  103.     drawback
  104.   end
  105. end
  106. #=========================================================================
  107. class Window_Base < Window
  108.   #-------------------------------------------------------------
  109.   def dispose
  110.     super
  111.     if @skin != nil
  112.       @skin.dispose
  113.     end
  114.   end
  115.   #------------------------------------------------------------
  116.   def x=(value)
  117.     super
  118.     if @skin != nil
  119.       @skin.x = value
  120.     end
  121.   end
  122.   #-----------------------------------------------------------
  123.   def y=(value)
  124.     super
  125.     if @skin != nil
  126.       @skin.yy = value
  127.     end
  128.   end
  129.   #-----------------------------------------------------------
  130.   def z=(value)
  131.     super
  132.     if @skin != nil
  133.       @skin.z = value
  134.     end
  135.   end
  136.   #----------------------------------------------------------
  137.   def width=(value)
  138.     if @skin != nil
  139.       @skin.width = value
  140.     end
  141.     super
  142.   end
  143.   #----------------------------------------------------------
  144.   def height=(value)
  145.     if @skin != nil
  146.       @skin.height = value
  147.     end
  148.     super
  149.   end
  150.   #--------------------------------------------------------------
  151.   def visible=(value)
  152.     super
  153.     if @skin != nil
  154.       @skin.visible = value
  155.     end
  156.   end
  157.   #------------------------------------------------------------
  158.   def skin=(value)
  159.     self.opacity = 0
  160.     self.back_opacity = 0
  161.     if @skin != nil
  162.       @skin.dispose
  163.     end
  164.     @skin = Skin.new(value, self)
  165.   end
  166.   #------------------------------------------------------------------
  167.   def openness=(value)
  168.     super
  169.     if @skin != nil
  170.       @skin.openness = self.openness
  171.     end
  172.   end
  173.   #-------------------------------------------------------------------
  174.   def viewport=(value)
  175.     super
  176.     if @skin != nil
  177.       @skin.viewport = value
  178.     end
  179.   end
  180.   #---------------------------------------------------------------------
  181.   def skin
  182.     if @skin != nil
  183.       return @skin
  184.     end
  185.   end
  186. end
复制代码
回复

使用道具 举报

30

主题

196

帖子

1977

积分

⑥精研

积分
1977
发表于 2009-2-27 03:23:12 | 显示全部楼层
这个,好像只能在脚本里逐个找到对应的window_skin,然后替换掉……

下面的脚本可以试一下(我就是用这个)
  1. #==============================================================================
  2. # ■ Window_Base
  3. #------------------------------------------------------------------------------
  4. #  游戏中全部窗口的超级类。
  5. #==============================================================================
  6. class Window_Base < Window
  7. attr_accessor :bg_sprite_name                   # 背景
  8. #--------------------------------------------------------------------------
  9. # ● 初始化对像
  10. #     x      : 窗口的 X 坐标
  11. #     y      : 窗口的 Y 坐标
  12. #     width  : 窗口的宽
  13. #     height : 窗口的宽
  14. #--------------------------------------------------------------------------
  15. def initialize(x, y, width, height)
  16.    super()
  17.    @windowskin_name = $game_system.windowskin_name   
  18.    unless @bg_sprite_name != nil
  19.      @bg_sprite_name = nil
  20.    end
  21.    @now_name = nil
  22.    @bg_sprite = Sprite.new
  23.    self.windowskin = RPG::Cache.windowskin(@windowskin_name)
  24.    self.x = x
  25.    self.y = y
  26.    self.width = width
  27.    self.height = height
  28.    self.z = 100   
  29.    if @bg_sprite_name != @now_name
  30.      @bg_sprite.x = self.x
  31.      @bg_sprite.y = self.y
  32.      @bg_sprite.z = self.z-1
  33.      @bg_sprite.bitmap = Bitmap.new("Graphics/Pictures/#{@bg_sprite_name}")
  34.    end
  35. end
  36. #--------------------------------------------------------------------------
  37. # ● 释放
  38. #--------------------------------------------------------------------------
  39. def dispose
  40.    # 如果窗口的内容已经被设置就被释放
  41.    if self.contents != nil
  42.      self.contents.dispose
  43.    end
  44.    super
  45.    @bg_sprite.dispose
  46. end
  47. #--------------------------------------------------------------------------
  48. # ● 刷新画面
  49. #--------------------------------------------------------------------------
  50. def update
  51.    # 如果窗口的外关被变更了、再设置
  52.    if $game_system.windowskin_name != @windowskin_name
  53.      @windowskin_name = $game_system.windowskin_name
  54.      self.windowskin = RPG::Cache.windowskin(@windowskin_name)
  55.    end
  56.    if (@bg_sprite_name != @now_name) or (@bg_sprite_name !=nil and ((@bg_sprite.x !=self.x) or (@bg_sprite.y !=self.y)))
  57.      @bg_sprite.x = self.x
  58.      @bg_sprite.y = self.y
  59.      @bg_sprite.z = self.z-1
  60.      @bg_sprite.bitmap = Bitmap.new("Graphics/Pictures/#{@bg_sprite_name}")
  61.    end
  62.    super
  63. end
  64. end
复制代码


使用方法:
插入下面这个,然后在需要的窗口定义@bg_sprite_name和透明度。背景图放在Pictures下面

举例1:
想把Window_EquipRight这个窗口的背景改为"装备右.png",则在Window_EquipRight里面的def initialize...这一行下面直接输入:@bg_sprite_name = "装备右"
然后在这个end前输入self.opacity = 0

举例2:
想把菜单左边的选项窗口背景改为"菜单选项.jpg",则在Scene_Menu里面找到@command_window = Window_Command.new
下面添加3行:
   @command_window.bg_sprite_name = "菜单选项"
   @command_window.opacity = 0
   @command_window.update

其它也一样。任何窗口需要背景的时候,就脚本中使用ctrl_shift_f搜索 Window_XXXXXX.new然后添加类似的3行就行了。如果改脚本中永久定义的类则会以后所有同类窗口都有背景。

小技巧:一个scene,只要定义左上角的窗口就行了,其它窗口只要定义透明度即可。可以给左上角窗口用一张640×480的图,就是全屏了。

小技巧2:如果所有窗口都使用图片,在我下面提供脚本的

def initialize(x, y, width, height)
   super()

下面添加一行:self.opacity = 0
则全都透明了

默认排版下每个scene对应要找的 添加背景的窗口 定义行(使用其它排版类似,自己找一下):
Scene_Title:@command_window = Window_Command.new
Scene_Map:无
Scene_Menu:@command_window = Window_Command.new
Scene_Item:@help_window = Window_Help.new
Scene_Skill:@skill_window = Window_Skill.new
Scene_Equip:@help_window = Window_Help.new
Scene_Status:@status_window = Window_Status.new(@actor)
Scene_File:建议使用截图存档,自己把进度调多些即可。默认最好在Window_SaveFile按举例1改
Scene_Save:同上
Scene_Load:同上
Scene_End:@command_window = Window_Command.new
Scene_Battle1-4:麻烦一些,自己自习找所有的.new
Scene_Shop:@help_window = Window_Help.new
Scene_Name:@input_window = Window_NameInput.new
Scene_Gameover:不用改
Scene_Debug:不用改(= =)
回复 支持 反对

使用道具 举报

9

主题

26

帖子

237

积分

③业余

积分
237
 楼主| 发表于 2009-2-27 09:36:53 | 显示全部楼层
调用的 图片  如何 定义 图片大小呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2025-6-19 16:03 , Processed in 0.010414 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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