【VX】 self.contents.draw_textに\〇〇の機能を反映させる方法

金田一光彦
記事: 33
登録日時: 2016年7月21日(木) 23:19

【VX】 self.contents.draw_textに\〇〇の機能を反映させる方法

投稿記事by 金田一光彦 » 2018年6月22日(金) 20:47

こんばんわ、スクリプトの改造に行き詰っているので質問させてください。

現時点での状況は以下になります:
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
samune.jpg (201.38 KiB) 閲覧数: 660 回


なのでself.contents.draw_textで処理されている文章でもKamesoftさんの書式指定文字描画で「\〇〇」系の操作を反映できるようにしたいのですが自分なりに改造してみたものの、どうしてもわからないので別ウィンドウでヘルプウィンドウを新規で作ろうかとも思いましたがなかなかテキストが表示されないので断念しました。
新規でヘルプウィンドウを作るか、self.contents.draw_text(x, y, width, WLH, item.description, 0)のヵ所を改造するか、どちらの方が効率が良いのでしょうか?
効率のいい法で改善方法がございましたら教えていただけませんでしょうか?

faida
記事: 224
登録日時: 2015年12月17日(木) 16:44

Re: 【VX】 self.contents.draw_textに\〇〇の機能を反映させる方法

投稿記事by faida » 2018年6月22日(金) 21:33

こんばんは。

ヘルプウィンドウ機能拡張を見たところ、改行の処理は以下のようにしているようですね。

コード: 全て選択

      # \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)
      }
どういうことかというと、「改行文字ごとに文字列を分けて配列にして」「手動で座標をいじって表示している」
といった感じです。
多分これをアイテム図鑑の該当部分に上書きして座標をいじればいけるのではないでしょうか。

なお効率に関しては分かりませんが、ヘルプウィンドウを作るよりは処理をこれに変えるだけの方が楽かな
と思っています。
---------------------------------------------
自作の(改造でない)スクリプト素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
金田一光彦
記事: 33
登録日時: 2016年7月21日(木) 23:19

Re: 【VX】 self.contents.draw_textに\〇〇の機能を反映させる方法

投稿記事by 金田一光彦 » 2018年6月22日(金) 22:34

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


このようにしてみましたが文章が何一つ表示されません…
faida
記事: 224
登録日時: 2015年12月17日(木) 16:44

Re: 【VX】 self.contents.draw_textに\〇〇の機能を反映させる方法

投稿記事by faida » 2018年6月22日(金) 22:48

それはそうだろうなとしか。

コード: 全て選択

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)
最後に編集したユーザー faida on 2018年6月22日(金) 23:58 [ 編集 1 回目 ]
---------------------------------------------
自作の(改造でない)スクリプト素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
金田一光彦
記事: 33
登録日時: 2016年7月21日(木) 23:19

Re: 【VX】 self.contents.draw_textに\〇〇の機能を反映させる方法

投稿記事by 金田一光彦 » 2018年6月22日(金) 23:35

faida 様

ですよね…
問題となる
self.contents.draw_text(x, y, width, WLH, item.description, 0)
をそのままにしていれば意味ないですよね。
その一行を消して新たに教えていただいたコードを元に調整していこうと思います。
問題の1行を消したらなんとか表示だけは上手く行きましたので引き続き改造していきます。
ありがとうございました。

“VX / Ace:質問” へ戻る