本帖最后由 有丘直方 于 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时,文字残缺了一块
结论:帮助文档完全在瞎写八写,而且文字缩小机制非常愚蠢地浪费大量位图空间