加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 GOODLATTICE 于 2023-8-8 17:19 编辑
有天突发奇想,想要做一个类似于各种游戏中加载界面显示tip的伪loading效果。
因为我的游戏毕竟重角色重剧情,想要放一些小漫画之类的在伪加载界面供人观赏再好不过。
在纠结代码问题时(本人是Ruby小白,几乎等同于一行代码都不会写的那种,只能看懂部分代码)我想到了请教chatGPT,于是我试着将自己的要求输入chatGPT,它给出框架,我再进行填充。然后在一次一次的出错中最终摸出了这份代码。
欢迎各路大佬优化代码,这份代码写的并不好。错的地方都算我的,好的地方都算GPT的。
# 良幸脚本-伪loading随机加载界面脚本 # 这是一个可以正常使用的Fortune脚本。 # 效果是利用SceneManager.call(Scene_GoodFortune)对话框脚本指令就可以做到从Graphics/goodfortune名下的文件夹中的png图片中(新加入的图片需要用数字编号命名并且在random bitmap类下加入相应的random读取程序)随机一张图片显示 # 套用它需要在事件对话框的“脚本”选项输入SceneManager.call(Scene_GoodFortune) # 请在路径Graphics下创建文件夹goodfortune,并将图片重命名为1~(你需要的显示张数),同时修改 # 随机获取一张图像模块的bitmaps=,使得你命名的图片路径始终处于这个定义中(用多少写多少),不然会notfound # 定义区 - 可以在这里根据需要修改相应参数 # 定义常量 FADE_IN_DURATION = 40 # 淡入持续时间(帧数) FADE_OUT_DURATION = 40 # 淡出持续时间(帧数) FADE_IN_FPS = 30 # 淡入过程每秒帧数 FADE_OUT_FPS = 30 # 淡出过程每秒帧数 DISPLAY_DURATION = 110 # 图像显示持续时间(帧数) class Scene_GoodFortune < Scene_Base def start super @viewport = Viewport.new(0, 0, Graphics.width, Graphics.height) create_sprite # 创建精灵 @fade_in_counter = FADE_IN_DURATION * FADE_IN_FPS / 60 # 计算淡入计数器 @display_counter = DISPLAY_DURATION # 计算显示计数器 @fade_out_counter = FADE_OUT_DURATION * FADE_OUT_FPS / 60 # 计算淡出计数器 @fade_in_opacity_rate = 255.0 / (@fade_in_counter + 1) # 计算每帧淡入透明度变化率 @fade_out_opacity_rate = 255.0 / (@fade_out_counter + 1) # 计算每帧淡出透明度变化率 @sprite.opacity = 0 # 初始透明度为0 @viewport.color.set(0, 0, 0, 0) @phase = :fade_in # 当前阶段为淡入阶段 end def update super case @phase when :fade_in update_fade_in when :display update_display when :fade_out update_fade_out end end # 淡入效果更新 def update_fade_in @sprite.opacity += @fade_in_opacity_rate.ceil # 调整透明度 @fade_in_counter -= 1 if @fade_in_counter <= 0 @phase = :display # 进入图像显示阶段 end end # 图像显示更新 def update_display @display_counter -= 1 if @display_counter <= 0 @phase = :fade_out # 进入淡出阶段 end end # 淡出效果更新 def update_fade_out @sprite.opacity -= @fade_out_opacity_rate.ceil # 调整透明度 @fade_out_counter -= 1 if @fade_out_counter <= 0 dispose_sprite # 释放精灵资源 SceneManager.return end end # 创建精灵和位图对象 def create_sprite @sprite = Sprite.new(@viewport) @bitmap = random_bitmap # 随机图像 @sprite.bitmap = @bitmap center_sprite(@sprite) # 将精灵居中 end # 释放精灵和位图对象 def dispose_sprite @bitmap.dispose @sprite.dispose @viewport.dispose end # 随机获取一张图像 def random_bitmap bitmaps = [Bitmap.new("Graphics/goodfortune/1"), Bitmap.new("Graphics/goodfortune/2"),] return bitmaps[rand(bitmaps.size)] end # 将精灵设置在视口正中间 def center_sprite(sprite) sprite.x = (Graphics.width - sprite.width) / 2 sprite.y = (Graphics.height - sprite.height) / 2 end end
# 良幸脚本-伪loading随机加载界面脚本
# 这是一个可以正常使用的Fortune脚本。
# 效果是利用SceneManager.call(Scene_GoodFortune)对话框脚本指令就可以做到从Graphics/goodfortune名下的文件夹中的png图片中(新加入的图片需要用数字编号命名并且在random bitmap类下加入相应的random读取程序)随机一张图片显示
# 套用它需要在事件对话框的“脚本”选项输入SceneManager.call(Scene_GoodFortune)
# 请在路径Graphics下创建文件夹goodfortune,并将图片重命名为1~(你需要的显示张数),同时修改 # 随机获取一张图像模块的bitmaps=,使得你命名的图片路径始终处于这个定义中(用多少写多少),不然会notfound
# 定义区 - 可以在这里根据需要修改相应参数
# 定义常量
FADE_IN_DURATION = 40 # 淡入持续时间(帧数)
FADE_OUT_DURATION = 40 # 淡出持续时间(帧数)
FADE_IN_FPS = 30 # 淡入过程每秒帧数
FADE_OUT_FPS = 30 # 淡出过程每秒帧数
DISPLAY_DURATION = 110 # 图像显示持续时间(帧数)
class Scene_GoodFortune < Scene_Base
def start
super
@viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
create_sprite # 创建精灵
@fade_in_counter = FADE_IN_DURATION * FADE_IN_FPS / 60 # 计算淡入计数器
@display_counter = DISPLAY_DURATION # 计算显示计数器
@fade_out_counter = FADE_OUT_DURATION * FADE_OUT_FPS / 60 # 计算淡出计数器
@fade_in_opacity_rate = 255.0 / (@fade_in_counter + 1) # 计算每帧淡入透明度变化率
@fade_out_opacity_rate = 255.0 / (@fade_out_counter + 1) # 计算每帧淡出透明度变化率
@sprite.opacity = 0 # 初始透明度为0
@viewport.color.set(0, 0, 0, 0)
@phase = :fade_in # 当前阶段为淡入阶段
end
def update
super
case @phase
when :fade_in
update_fade_in
when :display
update_display
when :fade_out
update_fade_out
end
end
# 淡入效果更新
def update_fade_in
@sprite.opacity += @fade_in_opacity_rate.ceil # 调整透明度
@fade_in_counter -= 1
if @fade_in_counter <= 0
@phase = :display # 进入图像显示阶段
end
end
# 图像显示更新
def update_display
@display_counter -= 1
if @display_counter <= 0
@phase = :fade_out # 进入淡出阶段
end
end
# 淡出效果更新
def update_fade_out
@sprite.opacity -= @fade_out_opacity_rate.ceil # 调整透明度
@fade_out_counter -= 1
if @fade_out_counter <= 0
dispose_sprite # 释放精灵资源
SceneManager.return
end
end
# 创建精灵和位图对象
def create_sprite
@sprite = Sprite.new(@viewport)
@bitmap = random_bitmap # 随机图像
@sprite.bitmap = @bitmap
center_sprite(@sprite) # 将精灵居中
end
# 释放精灵和位图对象
def dispose_sprite
@bitmap.dispose
@sprite.dispose
@viewport.dispose
end
# 随机获取一张图像
def random_bitmap
bitmaps = [Bitmap.new("Graphics/goodfortune/1"),
Bitmap.new("Graphics/goodfortune/2"),]
return bitmaps[rand(bitmaps.size)]
end
# 将精灵设置在视口正中间
def center_sprite(sprite)
sprite.x = (Graphics.width - sprite.width) / 2
sprite.y = (Graphics.height - sprite.height) / 2
end
end
使用效果图,实际每次触发的显示都为随机
本脚本使用署名-相同方式共享协议 3.0 (CC BY-SA 3.0协议),使用不需要报告,同时允许使用者在此基础上进行改编,也允许其无偿的使用于商业作品与非商业性质作品及参加比赛的作品中。
著名请标注“良怒”或“GOODRAGE”,感谢!
|