- 累计送礼:
- 0 个
- 累计收礼:
- 0 个
TA的每日心情 | 开心 前天 18:01 |
---|
签到天数: 114 天 连续签到: 4 天 [LV.6]常住居民II

管理员
  
- VIP
- 6
- 卡币
- 10677
- OK点
- 16
- 推广点
- 0
- 同能卷
- 0
- 积分
- 13452


|
烦死XP的蓝色窗口,想改个和别人不一样的,找不到窗口素材?
好容易找到一个窗口素材,对背景色调不满意?
用这个脚本吧,颜色随便调,美不死你!{:2_275:}
脚本用法看注释,效果图及相关附件在下面:
RUBY 代码 - #==============================================================================
- # ■ VX Ace窗口样式 by SailCat
- #------------------------------------------------------------------------------
- # 本脚本令XP拥有和VA完全一样的窗口外观。
- # 功能:
- # 1. 支持VA的窗口式样,包括边框(通过皮肤实现)、底色、扫描水印
- # 2. 支持RGSS3的窗口色调改变功能
- # 3. 支持RGSS3的窗口开闭效果
- # 4. 保留XP特有的窗口皮肤平铺功能(VA只能拉伸)
- # 5. 窗口色调支持不同窗口个别调整和灰度变化(RGSS3不支持)
- # 6. 扫描水印不喜欢可以关掉(RGSS3关不掉,只能改皮肤)
- # 使用方法:
- # 1. 插入本脚本到Main前面
- # 2. 下载002-VXAce.png并放到Windowskins文件夹
- # 你当然也可以用你自己喜欢的XP皮肤或默认皮肤
- # 3. (可选)如果要替换VA默认的扫描线效果,制作一个水印放到Pictures文件夹,
- # 更改相应设置即可,窗口水印的大小没要求,附件的Scanline为VA默认效果
- # 4. 调整窗口的色调:
- # 全局调整:使用$game_system.window_tone = Tone.new(r, g, b, gray)
- # 个别调整:使用window.tone = Tone.new(r, g, b, gray)
- # 或者window.tone.set(r, g, b, gray)
- # 5. 窗口的开闭效果:
- # window.openness = x (x为0-255) 设置打开度,0为完全关,255为完全开
- # window.open或window.close,在相应的Scene的update里调用
- # 6. 其他设定见下面的参数表
- #==============================================================================
- class Window_Base < Window
- # 如果你更改了分辨率请更改下面的两个值
- SCREEN_W = 640
- SCREEN_H = 480
- # 如果不要扫描线把下面改为false
- SCANLINE_EFFECT = true
- # 如果更改VA默认的扫描线效果,把下面改为扫描线的文件名(放在Pictures文件夹)
- SCANLINE_FILENAME = ""
- # 窗口垂直打开为false,水平打开为true
- OPEN_HORZ = false
- # 窗口垂直关闭为false, 水平关闭为true
- CLOSE_HORZ = false
- # 窗口的默认色调
- DEFAULT_TONE = Tone.new(-34, 0, 68, 0)
- #==============================================================================
- alias sailcat_dispose dispose unless method_defined?(:sailcat_dispose)
- alias sailcat_back_opacity= back_opacity= unless method_defined?(:sailcat_back_opacity=)
- alias sailcat_update update unless method_defined?(:sailcat_update)
- #--------------------------------------------------------------------------
- # ● 定义实例变量
- #--------------------------------------------------------------------------
- attr_reader :tone # 窗口的色调
- attr_reader :openness # 窗口的开启程度
- #--------------------------------------------------------------------------
- # ● 初始化对像
- # x : 窗口的 X 坐标
- # y : 窗口的 Y 坐标
- # width : 窗口的宽
- # height : 窗口的宽
- #--------------------------------------------------------------------------
- def initialize(x, y, width, height)
- super()
- @windowskin_name = $game_system.windowskin_name
- self.windowskin = RPG::Cache.windowskin(@windowskin_name)
- @back_sprite = Sprite.new
- @back_sprite.ox = 0
- @back_sprite.oy = 0
- @scan_sprite = Sprite.new
- @scan_sprite.ox = 0
- @scan_sprite.oy = 0
- @scan_sprite.visible = true
- @opening = false
- @closing = false
- @real_x = x
- @real_y = y
- @real_width = width
- @real_height = height
- self.x = x
- self.y = y
- self.width = width
- self.height = height
- self.z = 100
- self.sailcat_back_opacity = 0
- self.back_opacity = 192
- self.tone = $game_system.window_tone.clone
- draw_background
- self.scanline = SCANLINE_EFFECT
- end
- def tone=(tone)
- @tone = tone
- @back_sprite.tone = tone
- @scan_sprite.tone = tone
- end
- def update_open
- self.openness += 24
- @opening = falseifopen?
- end
- defopen?
- @openness == 255
- end
- defopen
- @opening = trueunlessopen?
- @closing = false
- end
- def update_close
- self.openness -= 24
- @closing = falseif close?
- end
- def close?
- @openness == 0
- end
- def close
- @closing = trueunless close?
- @opening = false
- end
- def draw_background
- if stretch
- @back_sprite.bitmap = self.windowskin
- @back_sprite.src_rect = Rect.new(0, 0, 128, 128)
- @back_sprite.zoom_x = (width - 4) / 128.0
- @back_sprite.zoom_y = (height - 4) / 128.0
- else
- @back_sprite.bitmap = @tiled_bitmap
- @back_sprite.src_rect = Rect.new(0, 0, width - 4, height - 4)
- @back_sprite.zoom_x = 1.0
- @back_sprite.zoom_y = 1.0
- end
- end
- def draw_scanline
- returnifself.scanline == falseor@scan_bitmap != nil
- if SCANLINE_FILENAME == ""
- @scan_bitmap = Bitmap.new(SCREEN_W - 4, SCREEN_H - 4)
- for i in0..((SCREEN_H - 5) / 2)
- @scan_bitmap.fill_rect(0, i * 2 + 1, SCREEN_W - 4, 1, Color.new(5, 5, 5, 40))
- end
- else
- bmp = RPG::Cache.picture(SCANLINE_FILENAME)
- @scan_bitmap = Bitmap.new(SCREEN_W - 4, SCREEN_H - 4)
- for i in0..((SCREEN_W - 5) / bmp.width)
- for j in0..((SCREEN_H - 5) / bmp.height)
- @scan_bitmap.blt(i * bmp.width, j * bmp.height, bmp, Rect.new(0, 0, bmp.width, bmp.height))
- end
- end
- end
- @scan_sprite.bitmap = @scan_bitmap
- @scan_sprite.src_rect = Rect.new(0, 0, width - 4, height - 4)
- @scan_sprite.zoom_x = 1.0
- @scan_sprite.zoom_y = 1.0
- end
- def dispose
- sailcat_dispose
- @back_sprite.dispose
- @tiled_bitmap.dispose
- @scan_sprite.dispose
- @scan_bitmap.dispose
- end
- def back_opacity
- return@back_sprite.opacity
- end
- def back_opacity=(value)
- @back_sprite.opacity = value
- @scan_sprite.opacity = value
- end
- def x=(x)
- @real_x = x
- super
- @back_sprite.x = x + 2
- @scan_sprite.x = x + 2
- end
- def y=(y)
- @real_y = y
- super
- @back_sprite.y = y + 2
- @scan_sprite.y = y + 2
- end
- def z=(z)
- super
- @back_sprite.z = z - 2
- @scan_sprite.z = z - 1
- end
- def width=(width)
- @real_width = width
- super
- if stretch
- @back_sprite.zoom_x = (width - 4) / 128.0
- else
- @back_sprite.src_rect = Rect.new(0, 0, width - 4, height - 4)
- end
- @scan_sprite.src_rect = Rect.new(0, 0, width - 4, height - 4)
- end
- def height=(height)
- @real_height = height
- super
- if stretch
- @back_sprite.zoom_y = (height - 4) / 128.0
- else
- @back_sprite.src_rect = Rect.new(0, 0, width - 4, height - 4)
- end
- @scan_sprite.src_rect = Rect.new(0, 0, width - 4, height - 4)
- end
- def visible=(visible)
- super
- @back_sprite.visible = visible
- @scan_sprite.visible = visible
- end
- def stretch=(stretch)
- if stretch != self.stretch
- super
- @back_sprite.bitmap.disposeif stretch
- draw_background
- end
- end
- def scanline
- @scan_sprite.visible
- end
- def scanline=(scanline)
- @scan_sprite.visible = scanline
- draw_scanline
- end
- def windowskin=(windowskin)
- super
- unless@tiled_bitmap.nil? or@tiled_bitmap.disposed?
- @tiled_bitmap.dispose
- end
- @tiled_bitmap = Bitmap.new(SCREEN_W - 4, SCREEN_H - 4)
- for i in0..4
- for j in0..4
- @tiled_bitmap.blt(i * 128, j * 128, self.windowskin,
- Rect.new(0, 0, 128, 128))
- end
- end
- draw_background unless@back_sprite.nil?
- end
- def update
- sailcat_update
- update_open if@opening
- update_close if@closing
- end
- def openness=(openness)
- last_x = @real_x
- last_y = @real_y
- last_w = @real_width
- last_h = @real_height
- @openness = [[openness, 255].min, 0].max
- if OPEN_HORZ
- self.x = last_x + (last_w / 2) * (255 - @openness) / 255
- self.width = last_w * @openness / 255
- self.ox = self.x - last_x
- @real_x = last_x
- @real_width = last_w
- else
- self.y = last_y + (last_h / 2) * (255 - @openness) / 255
- self.height = last_h * @openness / 255
- self.oy = self.y - last_y
- @real_y = last_y
- @real_height = last_h
- end
- self.contents_opacity = @openness
- end
- end
- class Game_System
- #--------------------------------------------------------------------------
- # ● 取得窗口的色调
- #--------------------------------------------------------------------------
- def window_tone
- # 返回窗口的色调,未设置返回默认值
- @window_tone.nil? ? (@window_tone = Window_Base::DEFAULT_TONE) : @window_tone
- end
- #--------------------------------------------------------------------------
- # ● 设置窗口的色调
- # value : 色调值,传入错误的参数不会更改色调
- #--------------------------------------------------------------------------
- def window_tone=(value)
- @window_tone = value if value.is_a?(Tone)
- end
- end
复制代码
搭配的附件:
1. VA的默认皮肤(已转为XP能用的格式)
2. VA的扫描线效果文件(可以不要,能自动画出来)
3. 范例工程
效果图:
这是所有设定全仿真VA的效果
这是每个窗口随机设定一个色调的效果
本帖来自P1论坛作者来自网络,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址: https://rpg.blue/forum.php?mod=viewthread&tid=389597 若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|