设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1749|回复: 3
打印 上一主题 下一主题

[已经解决] 关于text_size的问题

[复制链接]

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

跳转到指定楼层
1
发表于 2013-12-21 12:09:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 taroxd 于 2013-12-21 12:31 编辑

以下是我的测试内容,求解释
先声明,Game_System#playtime_s,被我重定义了,定义如下
RUBY 代码复制
  1. def playtime_s
  2.   sprintf("%02d:%02d", hour, minute)
  3. end

其中hour,minute方法已经定义,返回值分别是一个不超过59的非负整数

以下内容是在一个window中测试(下面的东西在window的refresh方法中),并且window的宽度是够的

测试1:
RUBY 代码复制
  1. draw_text(0, 0, 64, 24, $game_system.playtime_s)

结果:


测试2:
RUBY 代码复制
  1. str = $game_system.playtime_s
  2. draw_text(text_size(str), str)

结果:


测试3:
RUBY 代码复制
  1. str = $game_system.playtime_s
  2. p text_size(str).width
  3. p text_size(str).height

结果:
60,24

测试4:
RUBY 代码复制
  1. draw_text(0, 0, 60, 24, $game_system.playtime_s)

结果:
同测试2

请问是哪里出了问题呢?text_size返回的宽度为什么不合适呢?是中文字体的问题还是什么?

Lv4.逐梦者 (版主)

百合控

梦石
0
星屑
6643
在线时间
1275 小时
注册时间
2013-8-21
帖子
3657

开拓者

2
发表于 2013-12-21 12:20:52 | 只看该作者
本帖最后由 余烬之中 于 2013-12-21 12:22 编辑

在WindowBase里可以找到
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 绘制内容
  3.   #     args : 与 Bitmap#draw_text 相同
  4.   #--------------------------------------------------------------------------
  5.   def draw_text(*args)
  6.     contents.draw_text(*args)
  7.   end
  8.   #--------------------------------------------------------------------------
  9.   # ● 获取内容尺寸
  10.   #--------------------------------------------------------------------------
  11.   def text_size(str)
  12.     contents.text_size(str)
  13.   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 方法转换成字符串。

相信现在你已经明白了
萌新瑟瑟发抖
看到我请叫我去干活
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

3
 楼主| 发表于 2013-12-21 12:22:10 | 只看该作者
本帖最后由 taroxd 于 2013-12-21 12:26 编辑
余烬之中 发表于 2013-12-21 12:20
在WindowBase里可以找到

  #------------------------------------------------------------------------- ...


嗯,Window_Base里的这个方法找过了,Bitmap里的F1看过了。于是请问一下,轮廓部分指的是哪一块,有多宽呢?大概是4吗?
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

百合控

梦石
0
星屑
6643
在线时间
1275 小时
注册时间
2013-8-21
帖子
3657

开拓者

4
发表于 2013-12-21 12:51:34 | 只看该作者
taroxd 发表于 2013-12-21 12:22
嗯,Window_Base里的这个方法找过了,Bitmap里的F1看过了。于是请问一下,轮廓部分指的是哪一块,有多宽 ...

经测试是2

插入Main之前试试吧 因为不知道换字号对这个有没有影响 所以建议换字号的话用这段脚本测试一下
RUBY 代码复制
  1. tx = "Example"
  2. addon = 0
  3.  
  4. s = Sprite.new
  5. bmp = Bitmap.new(120, 120)
  6. s.bitmap = bmp
  7.  
  8. sp = Sprite.new
  9. show = Bitmap.new(120,120)
  10. sp.bitmap = show
  11. sp.x = 240
  12.  
  13. until false
  14.   bmp.clear
  15.   bmp.draw_text(30, 30, bmp.text_size(tx).width + addon,
  16.   bmp.text_size(tx).height, tx)
  17.   show.clear
  18.   show.draw_text(0, 0, 120, 120, addon)
  19.   flag = false
  20.   until flag
  21.     Graphics.update
  22.     Input.update
  23.     break if Input.trigger?(:B)
  24.     if Input.trigger?(:UP)
  25.       addon += 1
  26.       flag = true
  27.     elsif Input.trigger?(:DOWN)
  28.       addon -= 1
  29.       addon = 0 if addon < 0
  30.       flag = true
  31.     end
  32.   end
  33.   break unless flag
  34. end
  35.  
  36. bmp.clear
  37. show.clear

点评

嗯,是2  发表于 2013-12-21 13:42

评分

参与人数 1梦石 +1 收起 理由
迷糊的安安 + 1 嗯,是2

查看全部评分

萌新瑟瑟发抖
看到我请叫我去干活
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-17 03:05

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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