赞 | 286 |
VIP | 11 |
好人卡 | 74 |
积分 | 220 |
经验 | 281171 |
最后登录 | 2024-5-15 |
在线时间 | 9340 小时 |
Lv5.捕梦者 (暗夜天使) 只有笨蛋才会看到
- 梦石
- 1
- 星屑
- 21040
- 在线时间
- 9340 小时
- 注册时间
- 2012-6-19
- 帖子
- 7107
|
本帖最后由 喵呜喵5 于 2022-12-27 23:28 编辑
text_size 不会处理转义符
text_size 计算文字尺寸时是不会处理这些转义符的,它会简单粗暴的直接根据文字的原始内容计算尺寸
因此第一个bug 是你用 text_size 计算出来的文字实际宽度是不准确的
bug 的影响就是你以为计算的结果可以让文字能保证居中,实际转义符多了位置偏左偏右都有可能
draw_text_ex 会修改窗口后续所有文本的字体大小
在 draw_text_ex 的文本中,遇到 \{ 时会让对应字体大小缩小,你配置的提示文本用到了这个特性。文字大小变化靠的是修改当前窗口的 contents.font.size 属性来实现的
因为 draw_text_ex 最开始都会调用 reset_font_settings 将字体的尺寸恢复为初始值保证每次绘制相同内容的结果都是一样的所以普通代码这样做没问题
但是在还没恢复初始值时你调用了 text_size ,而 text_size 是根据 contents.font.size 来计算文字宽度的结果的
所以,在 draw_text_ex 前加入一段代码:p contents.font.size 就会注意到:窗口在输出第一段提示的时候和输出后续几段提示的时候当前字体大小实际上不一样的,
因此就是你游戏里的表现在相同的提示文本下,第一段的位移和其他几段不一样
为什么是每次清空后文本就对不齐了
因为每次清空后会调用 refresh 方法,会删掉当前窗口的 content 新创建一个,相当于将字体大小恢复为初始值
解决方向
提供以下四种思路你自己挑个简单的:
1. 在 draw_text_ex 后面手动加上 reset_font_settings 重置一下字体大小,这样每次调用 text_size 时当前窗口的字体大小都是一致的了,然后大家就都是歪的了(喂)
2. 不使用 \{ ,而是直接在 create_contents 后面加上 contents.font.size = XXX 来手动设置字体大小,保证每次调用 text_size 时当前窗口的字体大小都是一致的
3. CLOSER_TEXT 里加上 \} 把文字尺寸复原回来
4. 自己写一个能正确处理转义符的 text_size 方法,参考我这脚本的 207 行 https://script.miaowm5.com/post/1 (我看了眼,代码实现太复杂了还是别参考了)(喂)
实现思路实际上就是在一个透明窗口上调用 draw_text_ex 绘制完文字后,看绘制完文字时的光标位置,从而得出实际的文字长度
|
|