2023年7月1日時点Ren'Py ver.7.6.0の初心者の覚書。
変なところやもっと効率的な部分があったら教えてください。
この記事で確認できるネームボックスの実装内容は以下です。
- backgroundに設定したSolidの色を変更する
キャラクターによってネームボックスの表示を変更する
選択肢の編集を行う時はscreen.rpyのscreen say(who, what):(99行目あたり)です。
screen say(who, what):
style_prefix "say"
window:
id "window"
if who is not None:
window:
id "namebox"
style "namebox"
text who id "who"
text what id "what"
参考ドキュメントは特別な名前のスクリーンと台詞とナレーション
backgroundに設定したSolidの色を変更する
そもそもネームボックスの背景はこれで書き換えができます
define e = Character('Eileen', color="#c8ffc8", namebox_background="設定したい画像")
ただ私の場合はネームボックスのbackgroudをSolid()で設定しており、以下のように実装してもbackgroundの設定に失敗しました。
define e = Character('Eileen', color="#c8ffc8",namebox_background=Solid("#ecf460", xalign=gui.name_xalign))
ネームボックスの背景が透明になりました。
オブジェクトの引き渡しはできないのかもしれない。
そういう訳でCharacterではなくsay()を以下のように修正しました。
screen say(who, what):
style_prefix "say"
window:
id "window"
if who is not None:
window:
id "namebox"
style "namebox"
text who id "who"
if who == persistent.mc_name : #whoが喋るキャラクターの名前と一致しているか確認する
background Solid("#ecf460", xalign=gui.name_xalign)
else :
background Solid("#60f48c", xalign=gui.name_xalign)
text what id "what"
主にやっていることは
if who == persistent.mc_name :
で誰が喋っているのか調べて、
background Solid("#ecf460", xalign=gui.name_xalign)
一致している場合はbackgroundで直接値を設定しています。
まぁこれたぶんキャラクターに合わせてstyleを変更する形の方がオシャレな実装になると思うのですが、background以外変える予定がなかったのでこの実装方法にしました。
全部実装したらこんな感じ
screen say(who, what):
style_prefix "say"
window:
id "window"
if who is not None:
window:
id "namebox"
style "namebox"
text who id "who"
if who == persistent.mc_name : #主人公名
background Solid("#ecf460", xalign=gui.name_xalign)
elif who == __(detective_name) : #サブキャラクター
background Solid("#937cf8", xalign=gui.name_xalign)
elif who == __(doctor_name) : #サブキャラクター
background Solid("#f48a60", xalign=gui.name_xalign)
elif who == __(lady_name) : #サブキャラクター
background Solid("#f46071", xalign=gui.name_xalign)
else : #それ以外
background Solid("#60f48c", xalign=gui.name_xalign)
text what id "what"
比較する値が常に変数になっていますが、人によってはべた書きで比較してもいいと思います。
私の場合は途中で人の名前を思いつきで変えるので、その際に抜け漏れが発生防止で変数管理をしています。