Project1

标题: 伪loading随机加载界面脚本 [打印本页]

作者: GOODLATTICE    时间: 2023-5-30 13:31
标题: 伪loading随机加载界面脚本
本帖最后由 GOODLATTICE 于 2023-8-8 17:19 编辑

有天突发奇想,想要做一个类似于各种游戏中加载界面显示tip的伪loading效果。
因为我的游戏毕竟重角色重剧情,想要放一些小漫画之类的在伪加载界面供人观赏再好不过。
在纠结代码问题时(本人是Ruby小白,几乎等同于一行代码都不会写的那种,只能看懂部分代码)我想到了请教chatGPT,于是我试着将自己的要求输入chatGPT,它给出框架,我再进行填充。然后在一次一次的出错中最终摸出了这份代码。
欢迎各路大佬优化代码,这份代码写的并不好。错的地方都算我的,好的地方都算GPT的。
RUBY 代码复制
  1. # 良幸脚本-伪loading随机加载界面脚本
  2. # 这是一个可以正常使用的Fortune脚本。
  3. # 效果是利用SceneManager.call(Scene_GoodFortune)对话框脚本指令就可以做到从Graphics/goodfortune名下的文件夹中的png图片中(新加入的图片需要用数字编号命名并且在random bitmap类下加入相应的random读取程序)随机一张图片显示
  4. # 套用它需要在事件对话框的“脚本”选项输入SceneManager.call(Scene_GoodFortune)
  5. # 请在路径Graphics下创建文件夹goodfortune,并将图片重命名为1~(你需要的显示张数),同时修改 # 随机获取一张图像模块的bitmaps=,使得你命名的图片路径始终处于这个定义中(用多少写多少),不然会notfound
  6. # 定义区 - 可以在这里根据需要修改相应参数
  7. # 定义常量
  8. FADE_IN_DURATION = 40        # 淡入持续时间(帧数)
  9. FADE_OUT_DURATION = 40       # 淡出持续时间(帧数)
  10. FADE_IN_FPS = 30             # 淡入过程每秒帧数
  11. FADE_OUT_FPS = 30            # 淡出过程每秒帧数
  12. DISPLAY_DURATION = 110       # 图像显示持续时间(帧数)
  13.  
  14. class Scene_GoodFortune < Scene_Base
  15.   def start
  16.     super
  17.     @viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
  18.     create_sprite   # 创建精灵
  19.  
  20.     @fade_in_counter = FADE_IN_DURATION * FADE_IN_FPS / 60             # 计算淡入计数器
  21.     @display_counter = DISPLAY_DURATION                               # 计算显示计数器
  22.     @fade_out_counter = FADE_OUT_DURATION * FADE_OUT_FPS / 60          # 计算淡出计数器
  23.     @fade_in_opacity_rate = 255.0 / (@fade_in_counter + 1)             # 计算每帧淡入透明度变化率
  24.     @fade_out_opacity_rate = 255.0 / (@fade_out_counter + 1)           # 计算每帧淡出透明度变化率
  25.     @sprite.opacity = 0                                               # 初始透明度为0
  26.     @viewport.color.set(0, 0, 0, 0)
  27.  
  28.     @phase = :fade_in  # 当前阶段为淡入阶段
  29.   end
  30.  
  31.   def update
  32.     super
  33.  
  34.     case @phase
  35.     when :fade_in
  36.       update_fade_in
  37.     when :display
  38.       update_display
  39.     when :fade_out
  40.       update_fade_out
  41.     end
  42.   end
  43.  
  44.   # 淡入效果更新
  45.   def update_fade_in
  46.     @sprite.opacity += @fade_in_opacity_rate.ceil                # 调整透明度
  47.     @fade_in_counter -= 1
  48.  
  49.     if @fade_in_counter <= 0
  50.       @phase = :display  # 进入图像显示阶段
  51.     end
  52.   end
  53.  
  54.   # 图像显示更新
  55.   def update_display
  56.     @display_counter -= 1
  57.  
  58.     if @display_counter <= 0
  59.       @phase = :fade_out  # 进入淡出阶段
  60.     end
  61.   end
  62.  
  63.   # 淡出效果更新
  64.   def update_fade_out
  65.     @sprite.opacity -= @fade_out_opacity_rate.ceil              # 调整透明度
  66.     @fade_out_counter -= 1
  67.  
  68.     if @fade_out_counter <= 0
  69.       dispose_sprite  # 释放精灵资源
  70.       SceneManager.return
  71.     end
  72.   end
  73.  
  74.   # 创建精灵和位图对象
  75.   def create_sprite
  76.     @sprite = Sprite.new(@viewport)
  77.     @bitmap = random_bitmap  # 随机图像
  78.     @sprite.bitmap = @bitmap
  79.     center_sprite(@sprite)  # 将精灵居中
  80.   end
  81.  
  82.   # 释放精灵和位图对象
  83.   def dispose_sprite
  84.     @bitmap.dispose
  85.     @sprite.dispose
  86.     @viewport.dispose
  87.   end
  88.  
  89.   # 随机获取一张图像
  90.   def random_bitmap
  91.     bitmaps = [Bitmap.new("Graphics/goodfortune/1"),
  92.                Bitmap.new("Graphics/goodfortune/2"),]
  93.  
  94.     return bitmaps[rand(bitmaps.size)]
  95.   end
  96.  
  97.   # 将精灵设置在视口正中间
  98.   def center_sprite(sprite)
  99.     sprite.x = (Graphics.width - sprite.width) / 2
  100.     sprite.y = (Graphics.height - sprite.height) / 2
  101.   end
  102. end


使用效果图,实际每次触发的显示都为随机


本脚本使用署名-相同方式共享协议 3.0 (CC BY-SA 3.0协议),使用不需要报告,同时允许使用者在此基础上进行改编,也允许其无偿的使用于商业作品与非商业性质作品及参加比赛的作品中。
著名请标注“良怒”或“GOODRAGE”,感谢!

作者: 企鹅大虾    时间: 2023-8-3 07:27
多大变多大多大叫多大
作者: 喵呜喵5    时间: 2023-8-3 20:17
和chatgpt说一下,Bitmap.new 用完要 dispose,不然会有内存泄漏
作者: 楠程池    时间: 2023-8-10 17:55
感谢分享,顺便小漫画好可爱
作者: 41workroom    时间: 2023-8-10 21:18
玩屁股肉玩的
作者: Uryan    时间: 2023-11-12 14:28
本帖最后由 Uryan 于 2023-11-12 15:36 编辑

感谢分享!请问楼主这个插件MV能用吗?

二编:
自己改好了!感谢楼主分享原代码!




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