0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Ren’Py】キャラクターによってネームボックスの背景に設定したSolidの色を変更する

Last updated at Posted at 2023-07-01

2023年7月1日時点Ren'Py ver.7.6.0の初心者の覚書。
変なところやもっと効率的な部分があったら教えてください。

この記事で確認できるネームボックスの実装内容は以下です。

  1. backgroundに設定したSolidの色を変更する

キャラクターによってネームボックスの表示を変更する

選択肢の編集を行う時はscreen.rpyのscreen say(who, what):(99行目あたり)です。

screen.rpy
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の色を変更する

そもそもネームボックスの背景はこれで書き換えができます

script.rpy
define e = Character('Eileen', color="#c8ffc8", namebox_background="設定したい画像")

ただ私の場合はネームボックスのbackgroudをSolid()で設定しており、以下のように実装してもbackgroundの設定に失敗しました。

script.rpy
define e = Character('Eileen', color="#c8ffc8",namebox_background=Solid("#ecf460",  xalign=gui.name_xalign))

ネームボックスの背景が透明になりました。
オブジェクトの引き渡しはできないのかもしれない。

そういう訳でCharacterではなくsay()を以下のように修正しました。

screen.rpy
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以外変える予定がなかったのでこの実装方法にしました。

screenshot0001.pngscreenshot0002.png
こんな感じになります。

全部実装したらこんな感じ

screen.rpy
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"

比較する値が常に変数になっていますが、人によってはべた書きで比較してもいいと思います。
私の場合は途中で人の名前を思いつきで変えるので、その際に抜け漏れが発生防止で変数管理をしています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?