RGSS-長文メッセージ表示

カテゴリ: 投稿日: 2017-06-19
«RGSS一覧/利用規約

制御文字を多用すると、
「制御文字ナシならウィンドウいっぱいに表示できるメッセージなのに入らない! 短くなる!」
という問題に当たりませんか?

制御文字を拡張して使っている身としては結構ぶち当たります。
ハイ。

文字色変更だけでも、一行で数度色を変更したい時に困った事もあったので、ここいらで書置きしておきます。
※2017/08/15変更※
前回記述した方法では一度読み込むと次回に存在しない旨のエラーが起きてしまったため改善(荒いですが)


【今回の変更点】
・Interpreter

■Interpreter

適当にわかりやすい場所にメソッドを追加します。
「Interpreter 7」の一番後ろあたりが良いかもしれません(最後のendの前)
名前も自分でわかりやすく付ければ良いのですが、ここでは"long_message"としておきます。
※8/15変更点

 def long_message(txt)
  @list[@index] = (RPG::EventCommand.new(101,0,[txt]))
  @index -= 1
  return true
 end

以上を追加します。
"long_message"を実行したコマンドの代わりに指定したtxtの「文章の表示」処理を入れています。そのため、イベントコマンドの進行に関係する@indexをひとつ戻し、代わりに入ったlong_message=文章の表示を実行。
再び同じイベントを実行する際はlong_messageの処理ではなく、文章の表示として実行されます。


[実行]イベントコマンド「スクリプト」

long_messageを実行するには、イベントコマンドスクリプトに書き込みます。
long_messageの処理を書くひとつのイベントコマンド・スクリプトには"long_message"で使用するスクリプト以外は書かかないように。
下記が例となります。
例で動作確認をする場合、見切れてしまう場合がありますのでご自分で文章を作ってテストする事を推奨します。

txt = "一行目の冒頭部分です\n" +
"ニ行目です。\\C[1]制御文字で\\C[0]色を何度も" +
"\\C[2]変化させる\\C[0]のに使えます。\n" +
"さて、何行目でしょう?"
long_message(txt)

"\n"は改行です。
他、制御文字は¥をひとつ追加して記入しなければ反映されませんのでご注意。

イベントコマンドのスクリプトでは幅が限られるため、+で文章を繋いでいます。
txtは、long_messageに入れる値に他ならないので、tでもmessageでも何でもいいです。
イベントコマンドスクリプトひとつ分に入りきらない時は、頭に何も付いていないローカル変数ではなく、@を付けてインスタンス変数として扱えば、同イベント内の次に追加したスクリプトでも使用できます。
ローカルだと、ひとつのイベントコマンドスクリプトの中でしか使えません……

インスタンスにして入れた例→long_message(@txt)
この()内に入れた変数の値がInterpreterで処理されるという事になります。
他部分で文章を入れるなどするならグローバル変数でも良いかと。
long_message処理は残りませんが、変数は残ってもプレイ中基本的に見える事はないのでコマンドを複数に跨いでも大丈夫。


Interpreter内に数行追加するだけで、あとはイベントコマンドのスクリプトを使えば実行できてしまうので、作る側にとっても負担は少ないと思います。
制御文字で文章が入りきらない時は使えるかな。