查看: 61|回复: 0

[转载发布] XP仿真VA的窗口样式

[复制链接]
  • TA的每日心情
    开心
    5 天前
  • 签到天数: 33 天

    连续签到: 1 天

    [LV.5]常住居民I

    2022

    主题

    32

    回帖

    7144

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    0
    卡币
    5074
    OK点
    16
    积分
    7144
    发表于 同元一千年八月六日(秋) | 显示全部楼层 |阅读模式
    烦死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在线咨询功能删除,谢谢。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    天天去同能,天天有童年!
    回复 论坛版权

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-3 07:31 , Processed in 0.051773 second(s), 44 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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