Project1
标题:
update方法,更新画面导致游戏太卡,用它有什么技巧?
[打印本页]
作者:
掘窖人
时间:
2021-12-10 22:14
标题:
update方法,更新画面导致游戏太卡,用它有什么技巧?
以前看一些楼主说过update方法,之后我用它的时候都大概这样写:
def update
表达式
end
在窗口类用还好,因为不会太长时间呆在菜单里面,所以没发现什么卡;但是后来在地图场景(Scene_Map)里面用update 方法加了一些 值槽 的更新,比如生命值、饥饿值、头上聊天气泡之类,就卡得明显。
这种卡不是画面卡,是在按方向键跑步的时候,按住左一直跑一段时间再往右跑,角色会延迟1秒多才往右跑,然后按方向下跑一段再按方向键上也是延迟1秒多才开始往上跑。
感觉是因为用多了update方法导致的,
我看内建类更新方法一般是: Input.update、Windows.update 这样用,
但是我用时 def update 不知道是不是我搞错了什么, 更新不是这样用的吗?
表达式
end
比如:
def update
case WenZi.Yt #实际是$game_player.y坐标
when 0..1
@Zhi_Cao.contents_opacity=50
when 2..900
@Zhi_Cao.contents_opacity=255
end
end
这个更新,是更新值槽的透明度,如果角色走在地图 Y坐标为0到1之间的地方,值槽窗口不透明度就是50;在2到900之间,就是不透明度255;
然后让它一直更新判定。
不知道这种写法对不对,我脚本中大量使用这种update 方法更新,以前没怎么在地图中跑没发现,现在跑一下很要命,太卡了。。。
作者:
BMMGA
时间:
2021-12-11 13:31
emmm
update隔几帧更新次可能要好点
作者:
喵呜喵5
时间:
2021-12-11 14:57
减少无必要的画面重绘以及无必要的大开销计算可以减缓画面卡顿
以你主楼的代码为例,把修改透明度从每次update都修改一次调整为透明度发生变化了才修改一次
def update
case WenZi.Yt
when 0..1
@cache = 50
when 2..900
@cache = 255
end
if @Zhi_Cao.contents_opacity != @cache
@Zhi_Cao.contents_opacity = @cache
end
end
复制代码
作者:
guoxiaomi
时间:
2021-12-11 16:30
仔细检查draw_text是否被不断的调用,这是画面绘制里最耗时的东西
作者:
掘窖人
时间:
2021-12-12 20:22
其实我想问,def update
表达式
end
这个方法是什么原理?我没见它在父类哪里有定义,一般方法调用需要用【对象】 调用 【方法】的吧,也没发现它在哪里被调用了。
如果我在一个类里面,定义 def update
表达式
end
那我不创建实例,这个update方法会不会执行?
作者:
喵呜喵5
时间:
2021-12-12 22:35
掘窖人 发表于 2021-12-12 20:22
其实我想问,def update
表达式
end
你可以直接在脚本里全局搜索 .update ,就能发现各个update在哪里调用了
例如 Scene_Base 第93行
def update_all_windows
instance_variables.each do |varname|
ivar = instance_variable_get(varname)
ivar.update if ivar.is_a?(Window)
end
end
复制代码
这段代码的含义是所有 Scene_Base 的子类调用 update_all_windows 方法时,会执行他实例变量里是 Window 子类的那些实例变量的 update 方法
Scene_Base 的 update_all_windows 被他自己的 update_basic - update 方法调用
而这个 update 又被 Scene 自己的 main 用 until 循环的方式调用
def main
start
post_start
update until scene_changing?
pre_terminate
terminate
end
复制代码
然后,因为 Scene_Base 在 update 中调用了RGSS3的 Graphics.update,所以没有导致死循环,而是实现了每帧 update 一次的效果
def update_basic
Graphics.update
Input.update
update_all_windows
end
复制代码
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1