搜索附件  
同能RPG制作大师 附件中心 同能RM技术讨论区 RPG Maker XP 讨论区 XP仿真VA的窗口样式: Window_VA.zip

XP仿真VA的窗口样式: Window_VA.zip

 

XP仿真VA的窗口样式:
烦死XP的蓝色窗口,想改个和别人不一样的,找不到窗口素材?
好容易找到一个窗口素材,对背景色调不满意?
用这个脚本吧,颜色随便调,美不死你!{:2_275:}

脚本用法看注释,效果图及相关附件在下面:
RUBY 代码
  1. #==============================================================================
  2. # ■ VX Ace窗口样式 by SailCat
  3. #------------------------------------------------------------------------------
  4. #  本脚本令XP拥有和VA完全一样的窗口外观。
  5. #   功能:
  6. #    1. 支持VA的窗口式样,包括边框(通过皮肤实现)、底色、扫描水印
  7. #    2. 支持RGSS3的窗口色调改变功能
  8. #    3. 支持RGSS3的窗口开闭效果
  9. #    4. 保留XP特有的窗口皮肤平铺功能(VA只能拉伸)
  10. #    5. 窗口色调支持不同窗口个别调整和灰度变化(RGSS3不支持)
  11. #    6. 扫描水印不喜欢可以关掉(RGSS3关不掉,只能改皮肤)
  12. #   使用方法:
  13. #    1. 插入本脚本到Main前面
  14. #    2. 下载002-VXAce.png并放到Windowskins文件夹
  15. #       你当然也可以用你自己喜欢的XP皮肤或默认皮肤
  16. #    3. (可选)如果要替换VA默认的扫描线效果,制作一个水印放到Pictures文件夹,
  17. #       更改相应设置即可,窗口水印的大小没要求,附件的Scanline为VA默认效果
  18. #    4. 调整窗口的色调:
  19. #       全局调整:使用$game_system.window_tone = Tone.new(r, g, b, gray)
  20. #       个别调整:使用window.tone = Tone.new(r, g, b, gray)
  21. #                 或者window.tone.set(r, g, b, gray)
  22. #    5. 窗口的开闭效果:
  23. #       window.openness = x (x为0-255) 设置打开度,0为完全关,255为完全开
  24. #       window.open或window.close,在相应的Scene的update里调用
  25. #    6. 其他设定见下面的参数表
  26. #==============================================================================
  27. class Window_Base < Window
  28.   # 如果你更改了分辨率请更改下面的两个值
  29.   SCREEN_W = 640
  30.   SCREEN_H = 480
  31.   # 如果不要扫描线把下面改为false
  32.   SCANLINE_EFFECT = true
  33.   # 如果更改VA默认的扫描线效果,把下面改为扫描线的文件名(放在Pictures文件夹)
  34.   SCANLINE_FILENAME = ""
  35.   # 窗口垂直打开为false,水平打开为true
  36.   OPEN_HORZ = false
  37.   # 窗口垂直关闭为false, 水平关闭为true
  38.   CLOSE_HORZ = false
  39.   # 窗口的默认色调
  40.   DEFAULT_TONE = Tone.new(-34, 0, 68, 0)
  41. #==============================================================================
  42.   alias sailcat_dispose dispose unless method_defined?(:sailcat_dispose)
  43.   alias sailcat_back_opacity= back_opacity= unless method_defined?(:sailcat_back_opacity=)
  44.   alias sailcat_update update unless method_defined?(:sailcat_update)
  45.   #--------------------------------------------------------------------------
  46.   # ● 定义实例变量
  47.   #--------------------------------------------------------------------------
  48.   attr_reader   :tone                     # 窗口的色调
  49.   attr_reader   :openness                 # 窗口的开启程度
  50.   #--------------------------------------------------------------------------
  51.   # ● 初始化对像
  52.   #     x      : 窗口的 X 坐标
  53.   #     y      : 窗口的 Y 坐标
  54.   #     width  : 窗口的宽
  55.   #     height : 窗口的宽
  56.   #--------------------------------------------------------------------------
  57.   def initialize(x, y, width, height)
  58.     super()
  59.     @windowskin_name = $game_system.windowskin_name
  60.     self.windowskin = RPG::Cache.windowskin(@windowskin_name)
  61.     @back_sprite = Sprite.new
  62.     @back_sprite.ox = 0
  63.     @back_sprite.oy = 0
  64.     @scan_sprite = Sprite.new
  65.     @scan_sprite.ox = 0
  66.     @scan_sprite.oy = 0
  67.     @scan_sprite.visible = true
  68.     @opening = false
  69.     @closing = false
  70.     @real_x = x
  71.     @real_y = y
  72.     @real_width = width
  73.     @real_height = height
  74.     self.x = x
  75.     self.y = y
  76.     self.width = width
  77.     self.height = height
  78.     self.z = 100
  79.     self.sailcat_back_opacity = 0
  80.     self.back_opacity = 192
  81.     self.tone = $game_system.window_tone.clone
  82.     draw_background
  83.     self.scanline = SCANLINE_EFFECT
  84.   end
  85.   def tone=(tone)
  86.     @tone = tone
  87.     @back_sprite.tone = tone
  88.     @scan_sprite.tone = tone
  89.   end
  90.   def update_open
  91.     self.openness += 24
  92.     @opening = falseifopen?
  93.   end
  94.   defopen?
  95.     @openness == 255
  96.   end
  97.   defopen
  98.     @opening = trueunlessopen?
  99.     @closing = false
  100.   end
  101.   def update_close
  102.     self.openness -= 24
  103.     @closing = falseif close?
  104.   end
  105.   def close?
  106.     @openness == 0
  107.   end
  108.   def close
  109.     @closing = trueunless close?
  110.     @opening = false
  111.   end
  112.   def draw_background
  113.     if stretch
  114.       @back_sprite.bitmap = self.windowskin
  115.       @back_sprite.src_rect = Rect.new(0, 0, 128, 128)
  116.       @back_sprite.zoom_x = (width - 4) / 128.0
  117.       @back_sprite.zoom_y = (height - 4) / 128.0
  118.     else
  119.       @back_sprite.bitmap = @tiled_bitmap
  120.       @back_sprite.src_rect = Rect.new(0, 0, width - 4, height - 4)
  121.       @back_sprite.zoom_x = 1.0
  122.       @back_sprite.zoom_y = 1.0
  123.     end
  124.   end
  125.   def draw_scanline
  126.     returnifself.scanline == falseor@scan_bitmap != nil
  127.     if SCANLINE_FILENAME == ""
  128.       @scan_bitmap = Bitmap.new(SCREEN_W - 4, SCREEN_H - 4)
  129.       for i in0..((SCREEN_H - 5) / 2)
  130.         @scan_bitmap.fill_rect(0, i * 2 + 1, SCREEN_W - 4, 1, Color.new(5, 5, 5, 40))
  131.       end
  132.     else
  133.       bmp = RPG::Cache.picture(SCANLINE_FILENAME)
  134.       @scan_bitmap = Bitmap.new(SCREEN_W - 4, SCREEN_H - 4)
  135.       for i in0..((SCREEN_W - 5) / bmp.width)
  136.         for j in0..((SCREEN_H - 5) / bmp.height)
  137.           @scan_bitmap.blt(i * bmp.width, j * bmp.height, bmp, Rect.new(0, 0, bmp.width, bmp.height))
  138.         end
  139.       end
  140.     end
  141.     @scan_sprite.bitmap = @scan_bitmap
  142.     @scan_sprite.src_rect = Rect.new(0, 0, width - 4, height - 4)
  143.     @scan_sprite.zoom_x = 1.0
  144.     @scan_sprite.zoom_y = 1.0
  145.   end
  146.   def dispose
  147.     sailcat_dispose
  148.     @back_sprite.dispose
  149.     @tiled_bitmap.dispose
  150.     @scan_sprite.dispose
  151.     @scan_bitmap.dispose
  152.   end
  153.   def back_opacity
  154.     return@back_sprite.opacity
  155.   end
  156.   def back_opacity=(value)
  157.     @back_sprite.opacity = value
  158.     @scan_sprite.opacity = value
  159.   end
  160.   def x=(x)
  161.     @real_x = x
  162.     super
  163.     @back_sprite.x = x + 2
  164.     @scan_sprite.x = x + 2
  165.   end
  166.   def y=(y)
  167.     @real_y = y
  168.     super
  169.     @back_sprite.y = y + 2
  170.     @scan_sprite.y = y + 2
  171.   end
  172.   def z=(z)
  173.     super
  174.     @back_sprite.z = z - 2
  175.     @scan_sprite.z = z - 1
  176.   end
  177.   def width=(width)
  178.     @real_width = width
  179.     super
  180.     if stretch
  181.       @back_sprite.zoom_x = (width - 4) / 128.0
  182.     else
  183.       @back_sprite.src_rect = Rect.new(0, 0, width - 4, height - 4)
  184.     end
  185.     @scan_sprite.src_rect = Rect.new(0, 0, width - 4, height - 4)
  186.   end
  187.   def height=(height)
  188.     @real_height = height
  189.     super
  190.     if stretch
  191.       @back_sprite.zoom_y = (height - 4) / 128.0
  192.     else
  193.       @back_sprite.src_rect = Rect.new(0, 0, width - 4, height - 4)
  194.     end
  195.     @scan_sprite.src_rect = Rect.new(0, 0, width - 4, height - 4)
  196.   end
  197.   def visible=(visible)
  198.     super
  199.     @back_sprite.visible = visible
  200.     @scan_sprite.visible = visible
  201.   end
  202.   def stretch=(stretch)
  203.     if stretch != self.stretch
  204.       super
  205.       @back_sprite.bitmap.disposeif stretch
  206.       draw_background
  207.     end
  208.   end
  209.   def scanline
  210.     @scan_sprite.visible
  211.   end
  212.   def scanline=(scanline)
  213.     @scan_sprite.visible = scanline
  214.     draw_scanline
  215.   end
  216.   def windowskin=(windowskin)
  217.     super
  218.     unless@tiled_bitmap.nil? or@tiled_bitmap.disposed?
  219.       @tiled_bitmap.dispose
  220.     end
  221.     @tiled_bitmap = Bitmap.new(SCREEN_W - 4, SCREEN_H - 4)
  222.     for i in0..4
  223.       for j in0..4
  224.         @tiled_bitmap.blt(i * 128, j * 128, self.windowskin,
  225.           Rect.new(0, 0, 128, 128))
  226.       end
  227.     end
  228.     draw_background unless@back_sprite.nil?
  229.   end
  230.   def update
  231.     sailcat_update
  232.     update_open if@opening
  233.     update_close if@closing
  234.   end
  235.   def openness=(openness)
  236.     last_x = @real_x
  237.     last_y = @real_y
  238.     last_w = @real_width
  239.     last_h = @real_height
  240.     @openness = [[openness, 255].min, 0].max
  241.     if OPEN_HORZ
  242.       self.x = last_x + (last_w / 2) * (255 - @openness) / 255
  243.       self.width = last_w * @openness / 255
  244.       self.ox = self.x - last_x
  245.       @real_x = last_x
  246.       @real_width = last_w
  247.     else
  248.       self.y = last_y + (last_h / 2) * (255 - @openness) / 255
  249.       self.height = last_h * @openness / 255
  250.       self.oy = self.y - last_y
  251.       @real_y = last_y
  252.       @real_height = last_h
  253.     end
  254.     self.contents_opacity = @openness
  255.   end
  256. end
  257. class Game_System
  258.   #--------------------------------------------------------------------------
  259.   # ● 取得窗口的色调
  260.   #--------------------------------------------------------------------------
  261.   def window_tone
  262.     # 返回窗口的色调,未设置返回默认值
  263.     @window_tone.nil? ? (@window_tone = Window_Base::DEFAULT_TONE) : @window_tone
  264.   end
  265.   #--------------------------------------------------------------------------
  266.   # ● 设置窗口的色调
  267.   #     value : 色调值,传入错误的参数不会更改色调
  268.   #--------------------------------------------------------------------------
  269.   def window_tone=(value)
  270.     @window_tone = value if value.is_a?(Tone)
  271.   end
  272. end
复制代码


搭配的附件:
1. VA的默认皮肤(已转为XP能用的格式)

2. VA的扫描线效果文件(可以不要,能自动画出来)

3. 范例工程


效果图:
这是所有设定全仿真VA的效果

这是每个窗口随机设定一个色调的效果



             本帖来自P1论坛作者来自网络,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=389597  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。

QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

GMT+8, 2024-9-21 12:47 , Processed in 0.037670 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

返回顶部