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

Project1

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

[已经解决] [已解决]taroxd的ULDS怎么实现图片透明度渐变

[复制链接]

Lv4.逐梦者

梦石
0
星屑
7570
在线时间
1157 小时
注册时间
2016-9-10
帖子
165

开拓者

跳转到指定楼层
1
发表于 2018-4-23 19:55:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 devil033 于 2018-4-23 23:21 编辑

如题,想实现图片不透明度 由 255渐变至0,然后又从0渐变至255,如此不断循环,该怎么设置?谢谢。

RUBY 代码复制
  1. #----------------------------------------------------------------------------
  2. # ● 无限图层显示系统 Unlimited Layers Display System By Taroxd
  3. #----------------------------------------------------------------------------
  4. #
  5. #  使用方法:导入此脚本后,在地图上备注如下内容。
  6. #
  7. #  <ulds=filename>
  8. #    x: X坐标
  9. #      公式,默认为 0
  10. #    y: Y坐标
  11. #      公式,默认为 0
  12. #    z: Z坐标
  13. #      公式,只计算一次,默认为 10,可以设置为 -100 来当作远景图使用
  14. #    zoom: 缩放倍率
  15. #      公式,默认为 1。缩放的原点为画面左上角。
  16. #    zoom_x: 横向缩放倍率
  17. #      公式,默认为 zoom
  18. #    zoom_y: 纵向缩放倍率
  19. #      公式,默认为 zoom
  20. #    opacity: 不透明度
  21. #      公式,默认为 255
  22. #    blend_type: 合成方式
  23. #      公式,只计算一次。默认为 0 (0:正常、1:加法、2:减法)
  24. #    scroll: 图像跟随地图卷动的速度
  25. #      实数,默认为 32
  26. #    scroll_x: 图像跟随地图横向卷动的速度
  27. #      实数,默认为 scroll
  28. #    scroll_y:图像跟随地图纵向卷动的速度
  29. #      实数,默认为 scroll
  30. #    loop: 循环
  31. #      冒号后面不需要填写任何东西。
  32. #    visible: 图像是否显示
  33. #      公式,默认为 true      如:visible:!s[2]
  34. #    path: 图像的路径名
  35. #      默认为 Parallaxes
  36. #    color: 合成的颜色
  37. #      公式,只计算一次。默认为 Color.new(0, 0, 0, 0)
  38. #    tone: 色调
  39. #      公式,只计算一次。默认为 Tone.new(0, 0, 0, 0)
  40. #    eval: 初始化后,以 sprite 或 plane 为 self 执行的代码。
  41. #      公式,默认为空
  42. #    update: 图片显示时,每帧执行的更新代码
  43. #      公式,默认为 t += 1
  44. #    dispose: 图片释放前执行的代码
  45. #      公式,默认为空
  46. #  </ulds>
  47. #
  48. #  其中 filename 是图片文件名(无需扩展名),放入 Parallaxes 文件夹内
  49. #  这个文件夹可以通过 path 设置更改
  50. #
  51. #  在 <ulds=filename> 和 </ulds> 中间的部分均为选填。不填则自动设为默认值。
  52. #  每一个设置项只能写一行。(地图备注没有单行长度限制)
  53. #  每一行只能写一个设置项。
  54. #  一般来说,正常使用时大部分都是不需要设置的。
  55. #
  56. #  设置项目中的“公式”表示,这一个设置项可以像技能的伤害公式一样填写。
  57. #  “只计算一次”表示,该公式只会在刚刚进入地图时计算一次,之后不会更新。
  58. #  可用 t 表示当前已经显示的帧数,s[n], v[n] 分别表示 n 号开关和 n 号变量。
  59. #  width 表示图片宽度,height 表示图片高度。
  60. #
  61. #  例:
  62. #   <ulds=BlueSky>
  63. #     x: t
  64. #     scroll_x: 16
  65. #     scroll_y: 64
  66. #     loop:
  67. #   </ulds>
  68. #
  69. #  需要多行公式时,可以重复备注。
  70. #  例:
  71. #   <ulds=Slime>
  72. #     path: Battlers
  73. #     x: width / 2
  74. #     y: height / 2
  75. #     eval: self.ox = width / 2
  76. #     eval: self.oy = height / 2
  77. #     eval: self.angle = 180
  78. #   </ulds>
  79. #
  80. #----------------------------------------------------------------------------
  81. #  z 坐标详解:【-100】远景图
  82. #             【0】最低图块层、在普通角色下方
  83. #             【100】与普通角色相同
  84. #             【200】在普通角色上方
  85. #----------------------------------------------------------------------------
  86. #  更新记录:
  87. #   2014.07.10 Ver1.01: 修正了 zoom、zoom_y 会报错的问题
  88. #   2014.07.11 Ver1.02: 修正了切换图块组之后失效的问题
  89. #   2014.08.14 Ver1.1:  增加了 speed_x, speed_y 的设置
  90. #   2014.08.16 Ver1.2:  fix 设定更改为 scroll
  91. #   2014.08.29 Ver1.21: 修正了坐标误差
  92. #   2014.09.19 Ver1.22: 修正了远景图与图层使用相同文件时报错的问题
  93. #   2014.09.25 Ver2.0:  属性可以用公式进行设置了;其他细节改进
  94. #   2014.09.26 Ver2.01: 增加了 path、update 的设置
  95. #   2015.01.02 Ver2.1:  增加了 init、color、tone 的设置;其他细节改进
  96. #   2015.01.03 Ver2.11: 修复了 zoom 属性会导致坐标误差的问题
  97. #   2015.02.02 Ver2.12: 支持多行备注和公式中的 width 和 height;其他细节改进
  98. #   2015.07.04 Ver2.13: 修复了循环时可能不会更新的问题
  99. #   2017.03.22 Ver2.15: 允许文件名为空,即备注 <ulds></ulds>
  100. #   2017.05.10 Ver2.16: 增加了 dispose 设置
  101. #   2017.08.22 Ver2.17: 修复文件名为空时导致的 bug
  102. #----------------------------------------------------------------------------
  103.  
  104. module Taroxd; end
  105.  
  106. module Taroxd::ULDS
  107.  
  108.   DEFAULT_PATH = 'Parallaxes'                    # 图片文件的默认路径
  109.   DEFAULT_Z = 10                                 # 默认的 z 值
  110.   RE_OUTER = /<ulds[= ]?(.*?)>(.*?)<\/ulds>/mi  # 读取备注用的正则表达式
  111.   RE_INNER = /(\w+) *: *(.*)/                    # 读取设置用的正则表达式
  112.  
  113.   module Base
  114.     include Math
  115.  
  116.     attr_accessor :scroll_x, :scroll_y
  117.  
  118.     def dispose
  119.       bitmap.dispose if bitmap
  120.       super
  121.     end
  122.  
  123.     def adjust_x(x)
  124.       return x if @scroll_x.abs < Float::EPSILON
  125.       $game_map.adjust_x(x.fdiv(@scroll_x)) * @scroll_x
  126.     end
  127.  
  128.     def adjust_y(y)
  129.       return y if @scroll_y.abs < Float::EPSILON
  130.       $game_map.adjust_y(y.fdiv(@scroll_y)) * @scroll_y
  131.     end
  132.   end
  133.  
  134.   class Sprite < ::Sprite
  135.     include Base
  136.  
  137.     def x=(x)
  138.       super(adjust_x(x))
  139.     end
  140.  
  141.     def y=(y)
  142.       super(adjust_y(y))
  143.     end
  144.   end
  145.  
  146.   class Plane < ::Plane
  147.     include Base
  148.  
  149.     attr_reader :visible
  150.  
  151.     def initialize(_)
  152.       super
  153.       @visible = true
  154.     end
  155.  
  156.     def x=(x)
  157.       self.ox = -adjust_x(x)
  158.     end
  159.  
  160.     def y=(y)
  161.       self.oy = -adjust_y(y)
  162.     end
  163.  
  164.     def visible=(visible)
  165.       super
  166.       @visible = visible
  167.     end
  168.  
  169.     def width
  170.       bitmap.width
  171.     end
  172.  
  173.     def height
  174.       bitmap.height
  175.     end
  176.   end
  177.  
  178.   class << self
  179.  
  180.     # 从备注中读取设置,并生成数组
  181.     def from_note(note, viewport)
  182.       note.scan(RE_OUTER).map do |name, contents|
  183.         settings = {nil => name}
  184.         contents.scan(RE_INNER) do |key, value|
  185.           (settings[key] ||= '') << value << "\n"
  186.         end
  187.         new(settings, viewport)
  188.       end
  189.     end
  190.  
  191.     # 返回一个 ULDS::Sprite 或 ULDS::Plane 的实例
  192.     def new(settings, viewport)
  193.       @settings = settings
  194.       container(viewport)
  195.     end
  196.  
  197.     private
  198.  
  199.     def container(viewport)
  200.       (extract('loop') ? Plane : Sprite).new(viewport).tap do |container|
  201.         container.bitmap = make_bitmap
  202.         container.instance_eval(init_container_code, __FILE__, __LINE__)
  203.       end
  204.     end
  205.  
  206.     # 在一个 sprite 或 plane 的上下文中执行的代码。
  207.     # 如果难以理解,请尝试输出这段代码来查看。
  208.     def init_container_code
  209.       "#{binding_code}
  210.       #{init_attr_code}
  211.       #{define_update_code}
  212.       #{define_dispose_code}
  213.       #{extract 'eval'}"
  214.     end
  215.  
  216.     # 定义变量的代码
  217.     def binding_code
  218.       's = $game_switches
  219.       v = $game_variables
  220.       t = 0'
  221.     end
  222.  
  223.     # 只计算一次的初始化代码
  224.     def init_attr_code
  225.       "#{set_attr_code 'z', DEFAULT_Z}
  226.       #{set_attr_code 'scroll_x', 32}
  227.       #{set_attr_code 'scroll_y', 32}
  228.       #{set_attr_code 'blend_type'}
  229.       #{set_attr_code 'color'}
  230.       #{set_attr_code 'tone'}"
  231.     end
  232.  
  233.     # 更新的代码
  234.     def define_update_code
  235.       %{
  236.         define_singleton_method :update do
  237.           #{set_attr_code 'visible'}
  238.           return unless visible
  239.           #{set_attr_code 'zoom_x'}
  240.           #{set_attr_code 'zoom_y'}
  241.           #{set_attr_code 'opacity'}
  242.           #{set_attr_code 'x', 0}
  243.           #{set_attr_code 'y', 0}
  244.           #{set_t_code}
  245.         end
  246.       }
  247.     end
  248.  
  249.     def define_dispose_code
  250.       code = extract('dispose')
  251.       !code ? "" : %{
  252.         define_singleton_method :dispose do
  253.           #{code}
  254.           super()
  255.         end
  256.       }
  257.     end
  258.  
  259.     # 设置属性的代码
  260.     def set_attr_code(key, default = nil)
  261.       formula = extract(key, default)
  262.       formula && "self.#{key} = (#{formula})"
  263.     end
  264.  
  265.     # 设置时间的代码
  266.     def set_t_code
  267.       extract('update', 't += 1')
  268.     end
  269.  
  270.     # 获得位图
  271.     def make_bitmap
  272.       basename = extract(nil)
  273.       if !basename.empty?
  274.         folder_name = "Graphics/#{extract('path', DEFAULT_PATH).chomp}"
  275.         Bitmap.new("#{folder_name}/#{basename}")
  276.       else
  277.         nil
  278.       end
  279.     end
  280.  
  281.     # 获取备注中的设定值
  282.     def extract(key, default = nil)
  283.       @settings[key] || /(.+)_[xy]\Z/ =~ key && @settings[$1] || default
  284.     end
  285.   end
  286. end
  287.  
  288. class Game_Map
  289.  
  290.   def note
  291.     @map.note
  292.   end
  293. end
  294.  
  295. class Spriteset_Map
  296.  
  297.   def create_ulds
  298.     @ulds = Taroxd::ULDS.from_note($game_map.note, @viewport1)
  299.     @ulds_map_id = $game_map.map_id
  300.   end
  301.  
  302.   def refresh_ulds
  303.     dispose_ulds
  304.     create_ulds
  305.   end
  306.  
  307.   def update_ulds
  308.     refresh_ulds if @ulds_map_id != $game_map.map_id
  309.     @ulds.each(&:update)
  310.   end
  311.  
  312.   def dispose_ulds
  313.     @ulds.each(&:dispose)
  314.   end
  315.  
  316.   # 导入
  317.   %w(create update dispose).each do |name|
  318.     sym  = :"#{name}_parallax"
  319.     hook = :"#{name}_ulds"
  320.     old  = instance_method sym
  321.     define_method sym do
  322.       send hook
  323.       old.bind(self).call
  324.     end
  325.   end
  326. end

Lv4.逐梦者

梦石
0
星屑
7570
在线时间
1157 小时
注册时间
2016-9-10
帖子
165

开拓者

2
 楼主| 发表于 2018-4-23 23:21:45 | 只看该作者
已解决!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 12:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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