2017-06-19

RGSS-長文メッセージ表示

Comment ShareLink
«RGSS一覧/利用規約

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

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

文字色変更だけでも、一行で数度色を変更したい時に困った事もあったので、ここいらで書置きしておきます。

※2021/06/14修正※
 ループ内で使用した際のindent設定のために起きる不具合修正


【今回の変更点】
・Interpreter

■Interpreter

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

def long_message(txt)
 @list[@index] = (RPG::EventCommand.new(101, @list[@index-1].indent, [txt])) ※修正点
 @index -= 1
 return true
end

以上を追加します。
"long_message"を実行したコマンドの代わりに、指定したtxtの「文章の表示(code101)」処理を入れています。
イベントコマンド「スクリプト」を実行した後で「文章の表示」が実行されるため、
コマンドの進行に関係する"@index"をひとつ戻すことで反映。
深さを表わす"indent"を手前のindexと同じにして揃えておきます。
(ループ開始がindent=0であった場合、ループ内に入れたこのスクリプトもindent=0であった場合、ループ開始場所がこのスクリプトになってしまいます…修正前は0にしていてループで不具合が起きました。。。)


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

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で処理されるという事になります。
他部分で文章を入れるならグローバル変数でも良いかと。
変数は残ってもプレイ中基本的に見える事はないのでコマンドを複数に跨いでも大丈夫。

※注意点
直後に「選択肢」コマンドを入れたい場合、間に「注釈」または「ウェイト」など当たり障りのないコマンドを挟む必要があります。
メッセージと選択肢が混ざって表示されてしまうようです…原因がわかれば修正したい_(:3」∠)_


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

category: