Project1
标题: 关于text_size的问题 [打印本页]
作者: taroxd 时间: 2013-12-21 12:09
标题: 关于text_size的问题
本帖最后由 taroxd 于 2013-12-21 12:31 编辑
以下是我的测试内容,求解释
先声明,Game_System#playtime_s,被我重定义了,定义如下
def playtime_s
sprintf("%02d:%02d", hour, minute)
end
def playtime_s
sprintf("%02d:%02d", hour, minute)
end
其中hour,minute方法已经定义,返回值分别是一个不超过59的非负整数
以下内容是在一个window中测试(下面的东西在window的refresh方法中),并且window的宽度是够的
测试1:
draw_text(0, 0, 64, 24, $game_system.playtime_s)
draw_text(0, 0, 64, 24, $game_system.playtime_s)
结果:
测试2:
str = $game_system.playtime_s
draw_text(text_size(str), str)
str = $game_system.playtime_s
draw_text(text_size(str), str)
结果:
测试3:
str = $game_system.playtime_s
p text_size(str).width
p text_size(str).height
str = $game_system.playtime_s
p text_size(str).width
p text_size(str).height
结果:
60,24
测试4:
draw_text(0, 0, 60, 24, $game_system.playtime_s)
draw_text(0, 0, 60, 24, $game_system.playtime_s)
结果:
同测试2
请问是哪里出了问题呢?text_size返回的宽度为什么不合适呢?是中文字体的问题还是什么?
作者: 余烬之中 时间: 2013-12-21 12:20
本帖最后由 余烬之中 于 2013-12-21 12:22 编辑
在WindowBase里可以找到
#--------------------------------------------------------------------------
# ● 绘制内容
# args : 与 Bitmap#draw_text 相同
#--------------------------------------------------------------------------
def draw_text(*args)
contents.draw_text(*args)
end
#--------------------------------------------------------------------------
# ● 获取内容尺寸
#--------------------------------------------------------------------------
def text_size(str)
contents.text_size(str)
end
#--------------------------------------------------------------------------
# ● 绘制内容
# args : 与 Bitmap#draw_text 相同
#--------------------------------------------------------------------------
def draw_text(*args)
contents.draw_text(*args)
end
#--------------------------------------------------------------------------
# ● 获取内容尺寸
#--------------------------------------------------------------------------
def text_size(str)
contents.text_size(str)
end
Bitmap是游戏内建类 F1打开帮助文档 找到Bitmap类
draw_text(x, y, width, height, str[, align])
draw_text(rect, str[, align])
在位图区域 (x, y, width, height) 或矩形 rect (Rect 矩形类 ) 中描绘字符串 str 。
若 str 不是字符串对象,则会在执行之前,先调用 to_s 方法转换成字符串。
若文字长度超过区域的宽度,文字宽度会自动缩放,最高缩放60%。
文字的横向对齐方式预设为靠左对齐,可以设置 align 为 1 居中对齐,或设置为 2 靠右对齐。纵向则必定是总是居中对齐。
此处理需要花费时间,因此不建议每画格重绘一次文字。
text_size(str)
获取使用 draw_text 方法描绘 str 字符串时所需要的区域(Rect 矩形类 ) 。该区域不包含轮廓部分 (RGSS3) 和斜体的突出部分。
若 str 不是字符串对象,则会在执行之前,先调用 to_s 方法转换成字符串。
相信现在你已经明白了
作者: taroxd 时间: 2013-12-21 12:22
本帖最后由 taroxd 于 2013-12-21 12:26 编辑
余烬之中 发表于 2013-12-21 12:20
在WindowBase里可以找到
#------------------------------------------------------------------------- ...
嗯,Window_Base里的这个方法找过了,Bitmap里的F1看过了。于是请问一下,轮廓部分指的是哪一块,有多宽呢?大概是4吗?
作者: 余烬之中 时间: 2013-12-21 12:51
taroxd 发表于 2013-12-21 12:22
嗯,Window_Base里的这个方法找过了,Bitmap里的F1看过了。于是请问一下,轮廓部分指的是哪一块,有多宽 ...
经测试是2
插入Main之前试试吧 因为不知道换字号对这个有没有影响 所以建议换字号的话用这段脚本测试一下
tx = "Example"
addon = 0
s = Sprite.new
bmp = Bitmap.new(120, 120)
s.bitmap = bmp
sp = Sprite.new
show = Bitmap.new(120,120)
sp.bitmap = show
sp.x = 240
until false
bmp.clear
bmp.draw_text(30, 30, bmp.text_size(tx).width + addon,
bmp.text_size(tx).height, tx)
show.clear
show.draw_text(0, 0, 120, 120, addon)
flag = false
until flag
Graphics.update
Input.update
break if Input.trigger?(:B)
if Input.trigger?(:UP)
addon += 1
flag = true
elsif Input.trigger?(:DOWN)
addon -= 1
addon = 0 if addon < 0
flag = true
end
end
break unless flag
end
bmp.clear
show.clear
tx = "Example"
addon = 0
s = Sprite.new
bmp = Bitmap.new(120, 120)
s.bitmap = bmp
sp = Sprite.new
show = Bitmap.new(120,120)
sp.bitmap = show
sp.x = 240
until false
bmp.clear
bmp.draw_text(30, 30, bmp.text_size(tx).width + addon,
bmp.text_size(tx).height, tx)
show.clear
show.draw_text(0, 0, 120, 120, addon)
flag = false
until flag
Graphics.update
Input.update
break if Input.trigger?(:B)
if Input.trigger?(:UP)
addon += 1
flag = true
elsif Input.trigger?(:DOWN)
addon -= 1
addon = 0 if addon < 0
flag = true
end
end
break unless flag
end
bmp.clear
show.clear
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |