找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 45|回复: 2

[经验] 历史界面减缓卡顿的研究

[复制链接]
发表于 3 天前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
由于我的游戏中,历史界面是直接放在主菜单的,该界面的延迟会严重影响游戏体验,因此对如何减缓历史界面卡顿的问题进行了相关研究,分享给受到同样困扰的朋友

========以下是研究过程可以跳过不看=========
1.【限制历史记录条数】
确实影响比较大,将历史记录条数压缩到50条之后,性能到了可以忍受的范围,但仍然存在卡顿
2.【去掉页面上花里胡哨的UI设计】
没得卵用jpg
3.【去掉历史记录的outline】
性能提升了50%,但没有outline,我半透明的界面可能文字识别度会降低,因此无法使用这一方法
4.【比较不同语言下的打开速度】

神奇的是,英文下几乎毫无卡顿,但中文卡顿就很明显
5.【研究python源代码】
基于3和4的研究,怀疑历史界面的渲染速度和文本的展示方式有关,因此研究了一下python源代码
[RenPy] 纯文本查看 复制代码
        while len(history) > history_length:
            history.pop(0)

看到这一行literally心里一沉
最后发现性能瓶颈实际上是text what这一行,而且仅限于中文字符,英文和数字都不会卡顿
========以上是研究过程可以跳过不看=========


【结论】
界面卡顿的原因很可能是中文渲染时导致的,renpy实现中文的方式可能类似于从大字报中截取文字展示,因此对于字体文件异常庞大的中文,处理速度就会显著降低
事实上也确实,我的游戏中大量使用了30M大小的中文字体。

那么,解决问题的答案只有一个了:压缩字体!
通常压缩字体的方法,其实就是将字体包中的冗余字符删掉。比如我使用的30M中文字体,内部包含了将近2w个中文字符,但那些用于界面UI的字体,其实根本用不着这么大的字体包。
下面是我尝试过的字体压缩手段:
https://www.fontspider.vip/

在线压缩字体的软件,然而我使用后压缩失败(。)
但这个网页有自带的常用3600中文和4600中文原文,如果你也使用这个网页失败的话,可以将这些原文粘贴到别的字体压缩软件中使用
*请注意!这个网站自带的原文中不包含空格键,请一定注意要自己补上,不然你的空格键就无了……
https://yy123.ink/itResDetail/21693

Toolbox,本地使用的字体压缩软件,我使用的是这个,还是本地程序用起来更加安心
压缩到3600字符后,我的字体文件从30M变成了5M,游戏程序运行速度显著提升,历史记录页面也基本上不卡了!
如果你也有同样的问题,不妨试试看XD





评分

参与人数 2干货 +4 收起 理由
ZYKsslm + 2 楼主辛苦了!
烈林凤 + 2 感谢分享!

查看全部评分

本帖被以下淘专辑推荐:

发表于 前天 00:09 | 显示全部楼层
某种程度上来说,renpy的历史记录系统确实是座史山,加上renpy性能较差的因素,很多情况都会导致历史记录界面的卡顿
其实最好的解决方法,是自己重写历史记录系统,除了解决卡顿以外,还可以不用管renpy那历史记录系统里那些冗余的设置,并制作更多扩展
当然,重写历史记录系统对部分人来说代价有点大,所以说能通过其他方法解决卡顿问题最好
感谢分享!
回复 支持 抱歉

使用道具 举报

 楼主| 发表于 前天 14:10 | 显示全部楼层
烈林凤 发表于 2025-3-27 00:09
某种程度上来说,renpy的历史记录系统确实是座史山,加上renpy性能较差的因素,很多情况都会导致历史记录界 ...

谢谢回复!!
我也很想重写历史记录来改善屎山,事实上也研究了很多别的项目的历史记录写法,听说也有将文本保存成json调用,来取代历史记录的方法,但是我代码水平太低了暂时没办法实现,如果有大佬可以一起研究就太好了!
回复 支持 抱歉

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|RenPy中文空间 ( 苏ICP备17067825号|苏公网安备 32092302000068号 )

GMT+8, 2025-3-29 21:55 , Processed in 0.049757 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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