Project1

标题: 【蜜汁小技巧】使用 ULDS 制作伪 gif 动画远景图 [打印本页]

作者: taroxd    时间: 2017-3-22 20:20
标题: 【蜜汁小技巧】使用 ULDS 制作伪 gif 动画远景图
本帖最后由 taroxd 于 2017-5-10 07:04 编辑

ULDS 脚本:https://rpg.blue/forum.php?mod=viewthread&tid=367901

假设有 25 张图片,文件名分别为 Graphics/Parallaxes/MyAnimation/img-i.png,其中 i 为 0~24。
那么我们可以在地图下备注如下内容,使得地图的远景图为这 25 张图片循环播放,类似于 gif。这里设定帧数为 15(即游戏帧数的 1/4)

  1. <ulds=img-0>
  2.   # 在进入地图时,载入所有图片
  3.   eval: @bitmaps = Array.new(25) { |i| Bitmap.new "Graphics/Parallaxes/MyAnimation/img-#{i}" }
  4.   # 更新变量 t,这是 update 的默认行为
  5.   update: t += 1
  6.   # 根据变量 t 更新图片
  7.   update: self.bitmap = @bitmaps[t / 4 % 25] if t % 4 == 0
  8.   # 初始图片的路径。由于脚本要求,需要提供一张初始图片
  9.   path: Parallaxes/MyAnimation
  10.   # 与默认远景图的 z 值相同
  11.   z: -100
  12. </ulds>
复制代码


如果使用了 2.16 版本以上的 ULDS(更新于 2017/5/10),由于不需要有初始图片,可以简化为:

  1. <ulds>
  2.   # 在进入地图时,载入所有图片
  3.   eval: @bitmaps = Array.new(25) { |i| Bitmap.new "Graphics/Parallaxes/MyAnimation/img-#{i}" }
  4.   # 更新变量 t,这是 update 的默认行为
  5.   update: t += 1
  6.   # 根据变量 t 更新图片
  7.   update: self.bitmap = @bitmaps[t / 4 % 25] if t % 4 == 0
  8.   # 与默认远景图的 z 值相同
  9.   z: -100
  10.   # 释放位图对象
  11.   dispose: @bitmaps.each(&:dispose)
  12. </ulds>
复制代码

作者: 暮觉    时间: 2017-3-23 08:12
顺便把背景图透明度平滑渐变的方法也写一下吧!(……)
作者: 鸟猫    时间: 2017-3-23 16:51
噢哦,这个可以有,晚上动手试试。
作者: LanceRPG    时间: 2017-6-3 13:08
Hey , 你好  taroxd  
我昨天发出了一个问题,  有人帮我找到了你的这个帖子。
我昨晚试了一下你这个脚本, 几十张的序列帧, 背景能动 , 而且不影响前面的文字对话, 我加了背景声音 背景音乐, 音效, 淡入淡出, 依然很流畅,
这让我非常激动。   
     首先说一下, 我没研究过你的 ulds (它看起来有300行, 功能很强大) , 只是昨天我突然想 “让看文字时, 背景动起来” ,所以才提出了一个问题。
然后, 我今天又试了一下,发现一些问题, 个人观点, (这里作为一个伸手党, 只是作为讨论,没有别的意思)。
我试了下90帧不同图片, 系统内存占用不大, 也没有延迟掉帧现象,这很棒。  
而且,我知道rpgmaker 是每秒60帧,  你那个 “ 4 % ”应该是 控制速度的, 这里应该是 4帧(Rpgmaker里的帧)一幅图片。
所以我试了下做一串数字序列帧 , 每秒30张, 然后再rpgmaker里 每2帧一幅图播放,  结果发现效果很好。 时间走的的很正常,很流畅。 由于这个很不错的效果,我才写了这个回复,
因为我估计这样的效果,做一个10秒以内的循环应该也没问题。

下面是一些问题:
(1)  序列帧命名, 个人感觉哈, 大多数图像处理软件命名 都是 加0补位的, 比如5秒循环, 一共150帧, 那命名就是001,002,003 ....150。
估计会有些高端软件可以有选项去掉这个0, 但是我的Aftereffects 没有, 也就是说如果要150帧循环,  我要手动去掉 001---099里所有的0.
这是太耗费时间了。
(2) 按 X 呼出菜单,  再按X关闭菜单时, 会延迟2秒左右, 然后瞬间闪了一下。  虽然这跟我想实现的效果无关, (我昨天只想实现,看文本时背景动图)但这里只是说一下,
因为既然人物走动起来都可以很流畅,  只是呼出个菜单,理论上也可以做到不卡顿。   
          剩下的问题就是,  这个脚本粘到每个地图里确实可以运行, 但是对我这种脚本盲的用户儿, 地图那个备注框太小了, 字也很小,而且都是换行, 修改时很难找需要修改的数据。
能否把它做成一个脚本放到,脚本编辑器里呢, 这样的话字会变很大,容易看和修改。
以上就是昨晚到现在的测试结果。 非常感谢你的脚本。
作者: LanceRPG    时间: 2017-6-3 13:43
顺便问下, 你的这两段脚本目前的使用权限是自由开放的吗?
作者: LanceRPG    时间: 2017-6-4 13:27
再打扰一下,  我真的很想用这个脚本做一些效果,
但是我想做个几秒钟的循环, 请问taroxd您能否把它加工一下, 让它能识别三位数的序列帧序号。
就是 类似 001  002 003.......090. 091 092 .....300 301 ,  这样的。   
手动去掉每个名称前的0实在太困难了。  
作者: LanceRPG    时间: 2017-6-5 12:15
Hello taroxd
           我还是很想研究一下这个脚本, 因为感觉这个确实很不错, 所以即使你有些烦了,也要厚着脸皮多问问。  请问从你的角度来看, 300帧的图像序列真的会让系统负担很大吗? 可是300帧只有10秒。从我的角度来看, 我觉得3秒(90帧)左右的序列图, 640*480 Jpg 播放很流畅, 那么我觉得10秒也问题不大, 如果10秒没问题那么就是说,只要画些功夫在制图上, 完全可以实现这种背景动态的效果。这是很棒的一件事,至少在我看来, 因为“能” 和“不能” 有着本质的区别,  从流畅度来看,这个脚本已经“能” 实现这个功能了。
我确实不太清楚现在显卡这些硬件的性能, 但我打开任务管理器,  运行时, 发现内存和CPU 都没什么太大变化。 “使用 sprintf,参考默认脚本中读取地图名的方式”,  这个对我(脚本盲)来说完全无从下手 。  我真的很希望你能帮我弄一下那行脚本, 让它支持3位数的命名时带0的序列帧。即便只能粘贴到地图的备注里,我也很想尝试一下效果。     然后,Trust me 我真的是个RPG作者 ...  只是“消息”好像没法发给你....!



作者: 大胃王大卫    时间: 2017-7-21 01:56
请问 这种 也可以 用正片叠底 或者是叠加效果吗
作者: 大胃王大卫    时间: 2017-7-21 02:12
我按照楼主的使用方法没有成功  是怎么回事呀
作者: 574656549    时间: 2020-6-6 15:42
提示: 作者被禁止或删除 内容自动屏蔽
作者: Zeldashu    时间: 2020-11-17 23:04
想知道MV的ULDS应该怎么实现这方面的需求……




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1