ページ 1 / 1
【VX】 self.contents.draw_textに\〇〇の機能を反映させる方法
Posted: 2018年6月22日(金) 20:47
by 金田一光彦
こんばんわ、スクリプトの改造に行き詰っているので質問させてください。
現時点での状況は以下になります:
1.KGC・Kamesoftさんの書式指定文字描画を使っているのでアイテムや装備の説明を改行したり、色をつけています。
2.通常のヘルプウィンドウにはカラーが付いたり改行されて\Cや\|は表示されません。
そこで図鑑を追加しました。
白の魔さん(
http://izumiwhite.web.fc2.com/rgss2.html)のアイテム図鑑のアイテム説明文を見ると
self.contents.draw_text(x, y, width, WLH, item.description, 0)
このように処理をしているため色を付けたり改行ができないのだと思いました。RGSS講座等を読んだところ
draw_textは改行ができないとのことだそうで。
その為しっかり「\〇〇」と表示されてしまいます。

- samune.jpg (201.38 KiB) 閲覧された回数 3468 回
なのでself.contents.draw_textで処理されている文章でもKamesoftさんの書式指定文字描画で「\〇〇」系の操作を反映できるようにしたいのですが自分なりに改造してみたものの、どうしてもわからないので別ウィンドウでヘルプウィンドウを新規で作ろうかとも思いましたがなかなかテキストが表示されないので断念しました。
新規でヘルプウィンドウを作るか、self.contents.draw_text(x, y, width, WLH, item.description, 0)のヵ所を改造するか、どちらの方が効率が良いのでしょうか?
効率のいい法で改善方法がございましたら教えていただけませんでしょうか?
Re: 【VX】 self.contents.draw_textに\〇〇の機能を反映させる方法
Posted: 2018年6月22日(金) 21:33
by faida
こんばんは。
ヘルプウィンドウ機能拡張を見たところ、改行の処理は以下のようにしているようですね。
コード: 全て選択
# \N[x] を改行と見なさないように変換
buf = text.gsub(/\\N(\[\d+\])/i) { "\\__#{$1}" }
lines = buf.split(/(?:[|]|\\n)/i)
lines.each_with_index { |l, i|
# 変換した \N[x] を戻して描画
l.gsub!(/\\__(\[\d+\])/i) { "\\N#{$1}" }
self.contents.draw_format_text(4, i * WLH, self.width - 40, WLH, l, align)
}
どういうことかというと、「改行文字ごとに文字列を分けて配列にして」「手動で座標をいじって表示している」
といった感じです。
多分これをアイテム図鑑の該当部分に上書きして座標をいじればいけるのではないでしょうか。
なお効率に関しては分かりませんが、ヘルプウィンドウを作るよりは処理をこれに変えるだけの方が楽かな
と思っています。
Re: 【VX】 self.contents.draw_textに\〇〇の機能を反映させる方法
Posted: 2018年6月22日(金) 22:34
by 金田一光彦
faida 様
いつもお世話になっております。
私もKamesoftさんのコードにポイントがあるのだと思い、既にfaida様が上記に記載されたヘルプ拡張の部分を図鑑の
self.contents.draw_text(x, y, width, WLH, item.description, 0)
の上にコピペして色々試してみましたが、何も表示されなくなってしまいます。
改造の仕方が悪いのか追記しているカ所が間違っているのか見当もつきません。
図鑑スクリプトの
width = WD_itemdictionary_ini::I_text_display_width
のすぐ下に
コード: 全て選択
def set_text(text, align = 0)
if text != @text or align != @align
self.contents.clear
self.contents.font.color = normal_color
font_buf = self.contents.font.clone
# \N[x] を改行と見なさないように変換
buf = text.gsub(/\\N(\[\d+\])/i) { "\\__#{$1}" }
lines = buf.split(/(?:[|]|\\n)/i)
lines.each_with_index { |l, i|
# 変換した \N[x] を戻して描画
l.gsub!(/\\__(\[\d+\])/i) { "\\N#{$1}" }
self.contents.draw_format_text(4, i * WLH, self.width - 40, WLH, l, align)
self.contents.draw_text(x, y, width, WLH, item.description, 0)#追加
}
self.contents.font = font_buf
@text = text
@align = align
end
このようにしてみましたが文章が何一つ表示されません…
Re: 【VX】 self.contents.draw_textに\〇〇の機能を反映させる方法
Posted: 2018年6月22日(金) 22:48
by faida
それはそうだろうなとしか。
コード: 全て選択
self.contents.draw_text(x, y, width, WLH, item.description, 0)
ここを
コード: 全て選択
buf = item.description.gsub(/\\N(\[\d+\])/i) { "\\__#{$1}" }
lines = buf.split(/(?:[|]|\\n)/i)
lines.each_with_index { |l, i|
l.gsub!(/\\__(\[\d+\])/i) { "\\N#{$1}" }
self.contents.draw_format_text(x, y + i * WLH, width, WLH, l, 0) #修正
}
こう書き換えればいけるかもしれないなぁと思っただけなので。
※あっ間違えてた(self.width → width)
Re: 【VX】 self.contents.draw_textに\〇〇の機能を反映させる方法
Posted: 2018年6月22日(金) 23:35
by 金田一光彦
faida 様
ですよね…
問題となる
self.contents.draw_text(x, y, width, WLH, item.description, 0)
をそのままにしていれば意味ないですよね。
その一行を消して新たに教えていただいたコードを元に調整していこうと思います。
問題の1行を消したらなんとか表示だけは上手く行きましたので引き続き改造していきます。
ありがとうございました。