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

Project1

 找回密码
 注册会员
搜索
查看: 5434|回复: 2

随机多图平滑过渡(萤火虫标题的产物)

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2007-5-27
帖子
2560

第1届Title华丽大赛新人奖

发表于 2008-12-2 05:41:01 | 显示全部楼层 |阅读模式

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

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

x
除了萤火虫效果的脚本,这个也算萤火虫标题的产物:多图无缝连续渐隐渐显
萤火虫效果: http://rpg.blue/viewthread.php?tid=111137
萤火虫标题: http://rpg.blue/viewthread.php?tid=111458
↑跟此标题里的不太一样,经过改写


随机多图平滑过渡 by 沉影不器

功能描述: 场景类(Scene)的加强功能,在场景内部使用,也允许通过事件脚本开启
           随机抽取指定文件夹内的图片,并平滑过度到下一个随机图片,循环.
           允许指定图片的显示尺寸,或者使用原图大小
           允许设定过渡时间和显示位置等属性

使用说明: ① 脚本插入到Main之前
           ② 新建一个文件夹,复制您的图片到该文件夹内
              文件夹名和路径名由参数 IMG_PATH 指定
           ③ 在Scene类内部 或事件脚本中执行:
                img_fade(指定图片名,省略时随机)   开启功能
                img_dispose                       关闭功能
           ④ 脚本执行中允许修改的属性值:
                坐标 指定图片尺寸(宽高) 过渡持续时间 显示持续时间
                是否可见 是否自动过渡
           ⑤ 参数设定在脚本第行





  1. #==============================================================================
  2. # 随机多图平滑过渡 by 沉影不器
  3. #------------------------------------------------------------------------------
  4. # 功能描述: 场景类(Scene)的加强功能,在场景内部使用,也允许通过事件脚本开启
  5. #           随机抽取指定文件夹内的图片,并平滑过度到下一个随机图片,循环.
  6. #           允许指定图片的显示尺寸,或者使用原图大小
  7. #           允许设定过渡时间和显示位置等属性
  8. #
  9. # 使用说明: ① 脚本插入到Main之前
  10. #           ② 新建一个文件夹,复制您的图片到该文件夹内
  11. #              文件夹名和路径名由参数 IMG_PATH 指定
  12. #           ③ 在Scene类内部 或事件脚本中执行:
  13. #                img_fade(指定图片名,省略时随机)   开启功能
  14. #                img_dispose                       关闭功能
  15. #           ④ 脚本执行中允许修改的属性值:
  16. #                坐标 指定图片尺寸(宽高) 过渡持续时间 显示持续时间
  17. #                是否可见 是否自动过渡
  18. #           ⑤ 参数设定在脚本第行
  19. #==============================================================================
  20. # ■ Spriteset_Fade
  21. #==============================================================================
  22. class Spriteset_Fade
  23.   #--------------------------------------------------------------------------
  24.   # ○ 参数
  25.   #--------------------------------------------------------------------------
  26.   # 初始横坐标
  27.   X = 32
  28.   # 初始纵坐标
  29.   Y = 32
  30.   # 空间Z坐标
  31.   Z = 997
  32.   # 指定平滑过渡图片显示尺寸(宽高),如果使用原图大小,宽高都为 0
  33.   WIDTH  = 0
  34.   HEIGHT = 0
  35.   # 平滑过渡图片存放路径
  36.   IMG_PATH = "Graphics/Images/"
  37.   # 过渡持续时间
  38.   FADE_DURATION = 120
  39.   # 显示持续时间
  40.   SHOW_DURATION = 180
  41.   # 是否自动过渡图片(关闭时,图片一直显示到用户手动过渡)
  42.   AUTO_FADE      = true
  43.   # 即时释放临时位图的开关
  44.   #   我也不清楚释放对内存有多大好处
  45.   #   当 SHOW_DURATION 设定比较大 或者随机图很多,可以考虑打开此开关
  46.   DISPOSE_BITMAP = false
  47.   
  48.   #--------------------------------------------------------------------------
  49.   # ○ 定义实例变量
  50.   #--------------------------------------------------------------------------
  51.   attr_reader   :width
  52.   attr_reader   :height
  53.   attr_reader   :fade_duration
  54.   attr_reader   :show_duration
  55.   attr_reader   :auto_fade
  56.   #--------------------------------------------------------------------------
  57.   # ○ 初始化对象
  58.   #     img_name    : 图片名(省略时随机)
  59.   #--------------------------------------------------------------------------
  60.   def initialize(img_name = nil)
  61.     @img_name = img_name == nil ? rand_file : img_name
  62.     # 初始化属性
  63.     @width  = WIDTH
  64.     @height = HEIGHT
  65.     @fade_duration = FADE_DURATION
  66.     @show_duration = FADE_DURATION + SHOW_DURATION
  67.     @auto_fade = AUTO_FADE
  68.     @fade_able = false
  69.     # 图片数组
  70.     @images    = []
  71.     @images[0] = Sprite.new
  72.     @images[0].opacity = 0
  73.     set_bitmap(@images[0], @img_name)
  74.     @images[1] = Sprite.new
  75.     @images[1].bitmap = Bitmap.new(1,1)
  76.     # 调整坐标
  77.     self.x = X
  78.     self.y = Y
  79.     self.z = Z
  80.     ## 开始过渡
  81.     fade()###
  82.   end
  83.   #--------------------------------------------------------------------------
  84.   # ○ 释放
  85.   #--------------------------------------------------------------------------
  86.   def dispose
  87.     @images.each{|img| img.bitmap.dispose;img.dispose}
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   # ○ 更新
  91.   #--------------------------------------------------------------------------
  92.   def update
  93.     ## 自动过渡
  94.     if @auto_fade
  95.       if @show_duration == 0
  96.         @show_duration = SHOW_DURATION
  97.         fade()###
  98.       elsif @show_duration > 0
  99.         @show_duration -= 1
  100.       end
  101.     end
  102.     ## 开始过渡
  103.     if @fade_able
  104.       if @images[0].opacity > 0                         ## 过渡
  105.         @images[0].opacity -= 255.0 / @fade_duration
  106.       elsif @images[0].opacity <= 0                     ## 过渡结束处理
  107.         @fade_able = false
  108.         # 传递位图
  109.         @images[0].bitmap = @images[1].bitmap.clone
  110.       end
  111.     end
  112.   end
  113.   #--------------------------------------------------------------------------
  114.   # ○ 渐变
  115.   #     img_name    : 指定过渡图片(省略时随机)
  116.   #--------------------------------------------------------------------------
  117.   def fade(img_name = nil)
  118.     old_img_name = @img_name
  119.     @img_name = img_name == nil ? rand_file(old_img_name) : img_name
  120.     @images[0].opacity = 255
  121.     @images[1].opacity = 255
  122.     set_bitmap(@images[1], @img_name)
  123.     ## 打开渐变开关
  124.     @fade_able = true
  125.   end
  126.   #--------------------------------------------------------------------------
  127.   # ○ 随机文件名
  128.   #     exclude     : 被排除
  129.   #--------------------------------------------------------------------------
  130.   def rand_file(exclude = nil)
  131.     file = Dir.entries(IMG_PATH)
  132.     file.delete(".");file.delete("..")
  133.     ## 排除
  134.     file.delete(exclude) unless exclude == nil
  135.     return file[rand(file.size)]
  136.   end
  137.   #--------------------------------------------------------------------------
  138.   # ○ 调整坐标
  139.   #     sprite      : 精灵对象
  140.   #     img_name    : 指定图片名
  141.   #--------------------------------------------------------------------------
  142.   def set_bitmap(sprite, img_name)
  143.     if @width == 0 or @height == 0
  144.       sprite.bitmap = Cache.image(IMG_PATH + img_name)
  145.     else
  146.       bitmap = Cache.image(IMG_PATH + img_name)
  147.       dest_rect = Rect.new(0, 0, @width, @height)
  148.       src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  149.       sprite.bitmap = Bitmap.new(500, 500)
  150.       sprite.bitmap.stretch_blt(dest_rect, bitmap, src_rect)
  151.       ## 释放
  152.       bitmap.dispose if DISPOSE_BITMAP
  153.     end
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   # ○ 可视性
  157.   #     new_visible : X 坐标
  158.   #--------------------------------------------------------------------------
  159.   def visible=(new_visible)
  160.     @images.each{|img| img.visible = new_visible}
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # ○ 调整横坐标
  164.   #     new_x       : X 坐标
  165.   #--------------------------------------------------------------------------
  166.   def x=(new_x)
  167.     @images.each{|img| img.x = new_x}
  168.   end
  169.   #--------------------------------------------------------------------------
  170.   # ○ 调整横坐标
  171.   #     new_y       : Y 坐标
  172.   #--------------------------------------------------------------------------
  173.   def y=(new_y)
  174.     @images.each{|img| img.y = new_y}
  175.   end
  176.   #--------------------------------------------------------------------------
  177.   # ○ 调整横坐标
  178.   #     new_z       : Z 坐标
  179.   #--------------------------------------------------------------------------
  180.   def z=(new_z)
  181.     @images.each_index{|i| @images[i].z = new_z - i}
  182.   end
  183. end

  184. #==============================================================================
  185. # ■ Cache
  186. #==============================================================================
  187. module Cache
  188.   #--------------------------------------------------------------------------
  189.   # ○ 获取平滑过渡图片
  190.   #     filename : 文件名
  191.   #--------------------------------------------------------------------------
  192.   def self.image(filename)
  193.     load_bitmap("", filename)
  194.   end
  195. end

  196. #==============================================================================
  197. # ■ Game_Interpreter
  198. #==============================================================================
  199. class Game_Interpreter
  200.   #--------------------------------------------------------------------------
  201.   # ○ 开启随机多图平滑过渡
  202.   #     img_name    : 图片名(省略时随机)
  203.   #--------------------------------------------------------------------------
  204.   def img_fade(img_name = nil)
  205.     $scene.fade_spriteset = Spriteset_Fade.new(img_name)
  206.   end
  207.   #--------------------------------------------------------------------------
  208.   # ○ 关闭随机多图平滑过渡
  209.   #--------------------------------------------------------------------------
  210.   def img_dispose
  211.     $scene.fade_spriteset.dispose
  212.   end
  213. end

  214. #==============================================================================
  215. # ■ Scene_Base
  216. #==============================================================================
  217. class Scene_Base
  218.   #--------------------------------------------------------------------------
  219.   # ◎ 定义实例变量
  220.   #--------------------------------------------------------------------------
  221.   attr_accessor :fade_spriteset # 平滑过渡实例
  222.   #--------------------------------------------------------------------------
  223.   # ◎ 结束处理
  224.   #--------------------------------------------------------------------------
  225.   def terminate
  226.     img_dispose unless @fade_spriteset == nil
  227.   end
  228.   #--------------------------------------------------------------------------
  229.   # ◎ 更新画面
  230.   #--------------------------------------------------------------------------
  231.   def update
  232.     @fade_spriteset.update unless @fade_spriteset == nil
  233.   end
  234.   #--------------------------------------------------------------------------
  235.   # ○ 开启随机多图平滑过渡
  236.   #     img_name    : 图片名(省略时随机)
  237.   #--------------------------------------------------------------------------
  238.   def img_fade(img_name = nil)
  239.     @fade_spriteset = Spriteset_Fade.new(img_name)
  240.   end
  241.   #--------------------------------------------------------------------------
  242.   # ○ 关闭随机多图平滑过渡
  243.   #--------------------------------------------------------------------------
  244.   def img_dispose
  245.     @fade_spriteset.dispose
  246.   end
  247. end
复制代码


>>点击此处下载范例工程<<

阿桑奇不是一个偶像;阿桑奇是一种思想

Lv1.梦旅人

梦石
0
星屑
50
在线时间
116 小时
注册时间
2008-5-12
帖子
264
发表于 2008-12-3 07:24:06 | 显示全部楼层
牛羊狗猫鸡和鸭
回复 支持 反对

使用道具 举报

Lv1.梦旅人

敌敌畏

梦石
0
星屑
55
在线时间
51 小时
注册时间
2008-5-12
帖子
1748
发表于 2008-12-3 16:37:45 | 显示全部楼层
萤火虫之墓{/gg}
八客气的收下
回复 支持 反对

使用道具 举报

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

本版积分规则

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

站长信箱:fux2@moe9th.com|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2019-1-19 08:38

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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