设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1656|回复: 1
打印 上一主题 下一主题

[原创发布] 遮罩废稿

[复制链接]

Lv2.观梦者

梦石
0
星屑
466
在线时间
43 小时
注册时间
2021-9-4
帖子
14
跳转到指定楼层
1
发表于 2023-5-21 17:18:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
一个位图(temp_bitmap)以指定的 alpha 混合方式(0x40,即alpha值右移1位,也就是除以2),绘制到另一个位图(sprite.bitmap)上。具体来说,像素点会按照指定 alpha 值的比例混合原始位图(sprite.bitmap)和 temp_bitmap 的颜色值,生成最终的颜色值。这个过程可以让temp_bitmap中部分区域的图形叠加到sprite.bitmap之上,并带有一定透明度效果。

Lv2.观梦者

梦石
0
星屑
466
在线时间
43 小时
注册时间
2021-9-4
帖子
14
2
 楼主| 发表于 2023-5-21 17:20:28 | 只看该作者
  1. #==============================================================================
  2. # ■ Alpha Mask Util for RPG Maker VX
  3. #------------------------------------------------------------------------------
  4. # 说明:
  5. # 该脚本提供了一种在 RPG Maker VX 中使用 alpha mask 实现部分遮罩的方法。您可以简单地调用该脚本,根据需要设置输入和输出路径即可。
  6. #
  7. # 使用:
  8. # 在脚本调用事件命令中,添加 call_script 指令,
  9. #
  10. #    Scene_Map: $scene = Scene_AlphaMask.new
  11. #    Scene_Battle:$scene = Scene_AlphaMask.new
  12. #
  13. # 将您所需的原始图像和蒙版图像放到路径:"Graphics/Pictures/alphamask/" 中,并将名称记作:
  14. #
  15. #  - Target Image: target.png
  16. #  - Mask Image: mask.png
  17. #==============================================================================

  18. module AlphaMaskUtil
  19.   class << self
  20.     def run(work_dir, target_file, mask_file)
  21.       Graphics.freeze

  22.       src = load_picture(work_dir, target_file)
  23.       mask = load_picture(work_dir, mask_file)

  24.       w = [src.width, mask.width].min
  25.       h = [src.height, mask.height].min

  26.       temp_bitmap = Bitmap.new(w, h)

  27.       for y in 0...h
  28.         for x in 0...w
  29.           color1 = src.get_pixel(x, y)
  30.           color2 = mask.get_pixel(x, y)
  31.           alpha = color2.alpha

  32.           red = (color1.red * alpha / 255.0).to_i
  33.           green = (color1.green * alpha / 255.0).to_i
  34.           blue = (color1.blue * alpha / 255.0).to_i
  35.           temp_bitmap.set_pixel(x, y, Color.new(red, green, blue))
  36.         end
  37.       end

  38.       sprite = Sprite.new
  39.       sprite.bitmap = src

  40.       Graphics.transition
  41.       sprite.bitmap.blt(0, 0, temp_bitmap, Rect.new(0, 0, w, h), 0x40) #设定 alpha 混合的方式为 叠加(alpha >> 1)
  42.       sprite.visible = true

  43.       loop do
  44.         update_sprite(sprite)
  45.         Graphics.update
  46.         
  47.         break if Input.trigger?(:C) #可以按键盘C键来退出,也可以换成其它键位或按钮
  48.       end

  49.       Graphics.freeze
  50.       sprite.dispose
  51.     end

  52.     def load_picture(work_dir, filename)
  53.       Bitmap.new("#{work_dir}#{filename}")
  54.     end

  55.     def update_sprite(sprite)
  56.       sprite.update unless sprite.disposed?
  57.     end
  58.   end
  59. end

  60. class Scene_AlphaMask < Scene_Base
  61.   def start
  62.     super
  63.     @work_dir = "Graphics/Pictures/alphamask/"
  64.     @target_file = "target.png"
  65.     @mask_file = "mask.png"
  66.     AlphaMaskUtil.run(@work_dir, @target_file, @mask_file)
  67.     exit_scene
  68.   end

  69.   def exit_scene
  70.     fade_out(60)
  71.     SceneManager.scene.dispose
  72.   end
  73. end
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-22 11:10

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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