本帖最后由 有丘直方 于 2018-8-23 11:22 编辑
我感觉EB的RGSS在draw_text的文字压缩处理方面做得不好,不建议走EB的那一套
RGSS3测试代码:rows = Graphics.height / Font.default_size columns = 3 column_width = Graphics.width / columns text = "Hello" max_width = 65 bitmap_width = 100 sprites = [] bitmaps = [] (0...(rows * columns)).each do |i| bitmaps[i] = Bitmap.new(bitmap_width, Font.default_size) bitmaps[i].draw_text(0, 0, max_width - i, Font.default_size, text) bitmaps[i].draw_text(0, 0, bitmap_width, Font.default_size, max_width - i, 2) sprites[i] = Sprite.new sprites[i].bitmap = bitmaps[i] sprites[i].y = i % rows * Font.default_size sprites[i].x = i / rows * column_width end p bitmaps[0].text_size(text).width loop { Graphics.update }
rows = Graphics.height / Font.default_size
columns = 3
column_width = Graphics.width / columns
text = "Hello"
max_width = 65
bitmap_width = 100
sprites = []
bitmaps = []
(0...(rows * columns)).each do |i|
bitmaps[i] = Bitmap.new(bitmap_width, Font.default_size)
bitmaps[i].draw_text(0, 0, max_width - i, Font.default_size, text)
bitmaps[i].draw_text(0, 0, bitmap_width, Font.default_size, max_width - i, 2)
sprites[i] = Sprite.new
sprites[i].bitmap = bitmaps[i]
sprites[i].y = i % rows * Font.default_size
sprites[i].x = i / rows * column_width
end
p bitmaps[0].text_size(text).width
loop { Graphics.update }
测试结果(这是张544*416大小的图):
控制台输出:帮助文档信息:テキストの長さが矩形の幅を超える場合は、幅を 60% まで自動的に縮小して描画します。
若文字长度超过区域的宽度,文字宽度会自动缩小到 60%。 根据帮助文档所说,当以下代码返回true时width < bitmap.text_size(text).width
width < bitmap.text_size(text).width
绘制的文字的宽度将会是原来的60%
然而实际上,确实如楼主所说,宽度并不会一下子缩小到60%
从测试结果来看,实际上还没等绘制文字的宽度小于文字宽度时,实际绘制的文字宽度就开始减小了
比如在本次测试中,文字Hello的宽度在正常情况下应该是控制台所说的60,经过测量也确实是60
不过可以看到,当绘制的宽度为61时,文字的宽度就已经开始缩水了,尽管此时还是可以笃定地画的
经过测量,此时文字宽度变成了42,也就是原来的70%
第二次缩水在绘制的文字的宽度为56时出现,变成了36,也就是原来的60%
此时已经达到了帮助文档所说的60%了,但是文字宽度还会再缩小
当绘制宽度为50时,成功缩水到了50%
此后宽度不会再缩水了,因此当绘制文字的宽度小于正常宽度的50%时,文字就会开始残缺
可以看到当宽度为29时,文字残缺了一块
结论:帮助文档完全在瞎写八写,而且文字缩小机制非常愚蠢地浪费大量位图空间 |