查看: 1650|回复: 0

[rgss]自動換行描繪的簡單核心

[复制链接]

酱油的

梦石
0
星屑
1840
在线时间
2161 小时
注册时间
2007-12-22
回帖
3216

贵宾

发表于 2012-7-12 14:25:34 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 禾西 于 2012-7-12 14:27 编辑

[pre lang="ruby"]
#==================================================================#
# 自動換行 v1.00 by 禾西 on 2012.07.11
#------------------------------------------------------------------#
# * draw_lines(int x, int y, Bitmap bmp, String str, int max_char, int line_gap)
#     x, y 開始描繪的左上角坐標
#     bmp  需要描繪文字的位圖
#     str  需要換行的文字
#     max_char 一行最大的字符數
#     line_gap 行與行之間的間距
#==================================================================#
#
#調用方法
#    sp = Sprite.new
#    sp.bitmap = Bitmap.new(100,100)
#    draw_lines(0, 0, sp.bitmap, "不賣萌不給幫助!液!", 5, 1)
#
#==================================================================#
def draw_lines(x, y, bmp, str, max_char, line_gap)
  # 利用 split 劃分字符。
  # 這裡將假設:英語字符和漢字字符有同樣的寬度……
  # ……盡管很多字體都不是這樣(漢字比英語寬得多)。
  char_arr = str.split(//)
  while char_arr.size > 0
    str_buff = ""
    n = 0
    # 兩個循環:這一個 while 的作用是把一行的字符組合起來,
    # 免掉計算每個字符的 x 值位置。
    while (char_arr.size > 0 && n < max_char)
      n += 1
      str_buff += char_arr.shift
    end
    # 這個 while 的作用是描繪一行的字符,并計算下一行的 y 值。
    rect = bmp.text_size(str)
    rect.x = x
    rect.y = y
    bmp.draw_text(rect, str_buff)
    # y 值 = 字體高度 + 間隔
    # 這樣做回避了字體比行間隔更大的問題。
    y += (rect.width + line_gap)
  end
end
[/pre]

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本发帖返回顶部