蝉が鳴くぅぅぅぅぉぉぉぁ!!

 2010-08-19
最近、セミの鳴き声を聞いてない気がする。
もう終わりなのかな?

◆◇◆◇◆◇◆◇◆◇


draw_text の文字幅調節って、うまく調節できてないですよね。
右側に余白ができちゃって。
今回は、それを無くしちゃおうという試みです。
SS1008192075212.jpg SS1008192085215.jpg

一番簡単なのは、文章の画像を縮小して貼り付けちゃう方法だと思います。
ウィンドウに直接描画するのではなく、別の画像を作成して縮小なしで全文を描画します。
その画像をウィンドウに縮小して描画すれば、ピッタリ埋まるわけです。
SS1008182050948.jpg SS1008182060949.jpg
汚いですね。。。
class Window_Help
#--------------------------------------------------------------------------
# ○ テキスト設定
# text : ウィンドウに表示する文字列
# align : アラインメント (0..左揃え、1..中央揃え、2..右揃え)
#--------------------------------------------------------------------------

def set_text(text, align = 0)
if text != @text or align != @align
rect = Rect.new(4, 0, self.width - 40, WLH)
text_width = contents.text_size(text).width
self.contents.clear
if text_width <= rect.width
self.contents.font.color = normal_color
self.contents.draw_text(rect, text, align)
else
buffer = Bitmap.new(text_width, rect.height)
buffer.font.color = normal_color
buffer.draw_text(buffer.rect, text)
self.contents.stretch_blt(rect, buffer, buffer.rect)
buffer.dispose
end
@text = text
@align = align
end
end
end


先程のは、ちょっとひどかったので、今度は1文字ずつ縮小して描画したいと思います。
Window_Message のような感じですね。
SS1008182030906.jpg SS1008182040908.jpg
# 等幅フォントを前提とした処理
# 1文字ずつ描画を行う。半角文字の縮小は行わず、全角文字で調節する。
# 半角文字より1文字の描画幅が小さくなった場合のみ半角文字も縮小する。

class Window_Help
#--------------------------------------------------------------------------
# ○ テキスト設定
# text : ウィンドウに表示する文字列
# align : アラインメント (0..左揃え、1..中央揃え、2..右揃え)
#--------------------------------------------------------------------------

def set_text(text, align = 0)
if text != @text or align != @align
rect = Rect.new(4, 0, self.width - 40, WLH) # 描画範囲
char = text.split(//) # 1文字ずつ配列化
sz_all = char.size # 文字数
sz_sc = text.scan(/[ -~。-゚]/).size # 半角文字の数
sz_mc = sz_all - sz_sc # 全角文字の数
w_sc = contents.text_size(" ").width # 半角文字の横幅
w_mc = contents.text_size(" ").width # 全角文字の横幅
w_text = w_mc * sz_mc + w_sc * sz_sc # 文章の横幅
self.contents.clear
self.contents.font.color = normal_color
if w_text <= rect.width
self.contents.draw_text(rect, text, align)
else
w_char = (rect.width - w_sc * sz_sc) / sz_mc.to_f
w_char = (rect.width / sz_all.to_f) if w_char < w_sc
rect.width = w_char
dx = rect.x
for c in char
rect.x = dx
self.contents.draw_text(rect, c)
dx += [contents.text_size(c).width, w_char].min # rect.width ×
end
end
@text = text
@align = align
end
end
end

コメント




 

 ※ コメント内にURLを含めるには、バッククォート(`)をURLの直前に付け加えてください。


管理人のみ閲覧許可 [?]

トラックバック
トラックバックURL:
http://cacaosoft.blog42.fc2.com/tb.php/441-8a06d8e3
≪ トップページへこのページの先頭へ  ≫
カレンダー
05 << 2017/06 >> 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -

カテゴリー
最近の記事
最近のコメント
03/16 お返事
01/21 お返事
11/30 z座標
11/20 z座標
08/03 お返事

タグクラウド

リンク