遮罩废稿
一个位图(temp_bitmap)以指定的 alpha 混合方式(0x40,即alpha值右移1位,也就是除以2),绘制到另一个位图(sprite.bitmap)上。具体来说,像素点会按照指定 alpha 值的比例混合原始位图(sprite.bitmap)和 temp_bitmap 的颜色值,生成最终的颜色值。这个过程可以让temp_bitmap中部分区域的图形叠加到sprite.bitmap之上,并带有一定透明度效果。
#==============================================================================
# ■ Alpha Mask Util for RPG Maker VX
#------------------------------------------------------------------------------
# 说明:
# 该脚本提供了一种在 RPG Maker VX 中使用 alpha mask 实现部分遮罩的方法。您可以简单地调用该脚本,根据需要设置输入和输出路径即可。
#
# 使用:
# 在脚本调用事件命令中,添加 call_script 指令,
#
# Scene_Map: $scene = Scene_AlphaMask.new
# Scene_Battle:$scene = Scene_AlphaMask.new
#
# 将您所需的原始图像和蒙版图像放到路径:"Graphics/Pictures/alphamask/" 中,并将名称记作:
#
#- Target Image: target.png
#- Mask Image: mask.png
#==============================================================================
module AlphaMaskUtil
class << self
def run(work_dir, target_file, mask_file)
Graphics.freeze
src = load_picture(work_dir, target_file)
mask = load_picture(work_dir, mask_file)
w = .min
h = .min
temp_bitmap = Bitmap.new(w, h)
for y in 0...h
for x in 0...w
color1 = src.get_pixel(x, y)
color2 = mask.get_pixel(x, y)
alpha = color2.alpha
red = (color1.red * alpha / 255.0).to_i
green = (color1.green * alpha / 255.0).to_i
blue = (color1.blue * alpha / 255.0).to_i
temp_bitmap.set_pixel(x, y, Color.new(red, green, blue))
end
end
sprite = Sprite.new
sprite.bitmap = src
Graphics.transition
sprite.bitmap.blt(0, 0, temp_bitmap, Rect.new(0, 0, w, h), 0x40) #设定 alpha 混合的方式为 叠加(alpha >> 1)
sprite.visible = true
loop do
update_sprite(sprite)
Graphics.update
break if Input.trigger?(:C) #可以按键盘C键来退出,也可以换成其它键位或按钮
end
Graphics.freeze
sprite.dispose
end
def load_picture(work_dir, filename)
Bitmap.new("#{work_dir}#{filename}")
end
def update_sprite(sprite)
sprite.update unless sprite.disposed?
end
end
end
class Scene_AlphaMask < Scene_Base
def start
super
@work_dir = "Graphics/Pictures/alphamask/"
@target_file = "target.png"
@mask_file = "mask.png"
AlphaMaskUtil.run(@work_dir, @target_file, @mask_file)
exit_scene
end
def exit_scene
fade_out(60)
SceneManager.scene.dispose
end
end
页:
[1]