Персонажи (Character).
Персонажи

В большинстве визуальных новелл, главную роль играют, так называемые персонажи.

И дабы было проще работать с персонажами, в Ren'Py есть такое понятие, как Character. Он регистрируется в блоке init, и состоит из нескольких аргументов.

Самый простой character выглядит примерно так:
Код
init:
    $ nm = Character(u"Имя", color="#ffffff")

nm - регистрируемое название, для быстрого написания, в коде, пред самой репликой. .
u"Имя" - имя, которым будет подписана реплика, выведенная на экран.

color - цвет имени, указывается в стандартной, для Ren'Py, цветовой модели RGB.

Регистрируемое название, необходимо вписывать пред нужной вам репликой:
Код
label start:
    nm "Hello, world!"


Аргументы для автоматического добавления символов в начало/конец имени персонажа, либо реплики:


К примеру, перед именем персонажа поставим многоточие, а после реплики, восклицательный знак.
Код
init:
    $ nm = Character (u"Имя", color="#ffffff",
    who_prefix = '...',
    what_suffix = '!' )
label start:
    nm "Hello, world"



Давайте создадим персонажа, с уникальным для него диалоговым окном и расположенным, слева от реплик, спрайтом.
Для этого нам нужно иметь спрайт диалогового окна и непосредственно, персонажа.
Если разрешение игры 800х600, то стандартный размер диалогового окна будет составлять 800x150 пикселей.
Спрайт для персонажа, я возьму, размером 150х200 пикселей.
Код
init:
#...Обычный персонаж
    $ nm = Character(u"Имя", color="#ffffff", who_prefix = '...', what_suffix = '!')  

#...Мой персонаж
    $ er = Character(_(u'Эрвин'), color="#b1bab1", window_left_padding=160, window_background="do.png",  
                    show_side_image=Image("er_h.png", xalign=0.0, yalign=1.0))

label start:
    nm "Обычный персонаж"
    er "Мой персонаж"
    return #...Возвращение в главное меню

window_left_padding=160 - указание расположения текста в диалоговом окне, относительно левой стороны экрана, поскольку спрайт персонажа занимает 150 пикселей, ещё 10 оставим, дабы между спрайтом и текстом было немного свободного пространства.
window_background="do.png" - указание фона, для диалогового окна.
show_side_image=Image("er_h.png", xalign=0.0, yalign=1.0) - строка, для определения спрайта персонажа для текста, так называемая "голова".

P.S. xalign - значение с плавающей точкой, по координате X, yalign - значение с плавающей точкой, по координате Y.
P.S.S. Строка window_left_padding взята из options.rpy.

Результат:
Обычный персонаж:


Мой персонаж:

Таких эффектов можно добиться, используя лишь character.

P.S.S.S. Если у вас "головы" у всех персонажей, то тогда window_left_padding лучше менять в самом options.rpy, нежели каждому персонажу прописывать одно и то же.

Уже зарегистрированные персонажи

В Ren'Py имеется пара, уже зарегистрированных персонажей.

1. centered - выводит текст по центру экрана, без диалогового окна.
Код
label start:
    scene black #...Чёрный фон
    centered "Hello, world!"



2. extend - продолжает предыдущую реплику. Удобно, если вам необходимо, во время реплики, произвести смену спрайта, а после продолжить данную реплику. Речь о нём уже шла.

Аргументов для персонажей можно записывать бесконечное множество. Создавайте персонажей, как будет удобней вам.

©Программист Celestial Novels

Автор материала: Sota
Материал от пользователя сайта.



Ren'Py 25.09.14 10968 Sota мануал, ren'py, головы, character, Персонажи, ренпай, зарегистрированные персонажи 5.0/5

Комментарии (27):
2
1 Рангес   (25.09.14 20:06)
отличная статья, молодец! продолжай в том же духе!

-1
2 Sota   (25.09.14 20:09)
132
Спасибо :3 Буду стараться ^^

0
26 Ennka   (13.09.16 19:50)
40987
У меня такой вопрос. Можно ли сделать одновременно два диалоговых окна? Допустим для ГГ диалоговое окно стандартное и находится внизу, а реплики остальных персонажей появляются в отдельных диалоговых окнах "облачках".
Я уже бьюсь над этим очень долгое время. Надеюсь, что хотя бы здесь мне помогут angry

1
3 barsunduk   (26.09.14 00:10)
860
> Если у вас "головы" у всех персонажей, то тогда window_left_padding лучше менять в самом options.rpy, нежели каждому персонажу прописывать одно и то же.

в таком случае и для обычного текста будет отступ для картинки, которой нет. а вдруг вы не хотите такого отступа для обычного текста? поможет это:

init:
# narrator - это пустой персонаж. т.е. просто текст
....define narrator = Character(None, window_left_padding=0) # без отступа!

# а это, чтобы не лезть в options.rpy,
# изменим отступ прямо из script.rpy:
....$ style.window.left_padding=200
....$ style.rebuild()

# теперь в объявлении говорящей головы можно не указывать отступ
....image side dudehead = "dudehead.png"
....define dude = Character("Чувак", image=dudehead)

0
4 Sota   (26.09.14 08:33)
132
>изменим отступ прямо из script.rpy
Точно, забыл упомянуть, спасибо. smile_45

0
5 Vinriala   (10.02.15 13:54)
3772
У меня вопрос насчёт вывода текста без диалогового окна. Есть ли теги для перенесения текста на следующую строчку, как в стихотворениях обычно делают? Либо для перехода с одной сцены на другую, если есть только этот чёрный экран.

0
6 Sota   (05.05.15 02:15)
132
Тег - \n для перевода на новую строку. К примеру
"Hello \nWorld!"
Будет как:

"Hello
World!"
Ответ от слоу-слоу-слоупока.

0
7 Chrono_   (05.05.15 02:43)
6827
Мммм...объясните, пожалуйста, для д***ла Х_Х . Вот вы говорите стандартное разрешение экрана 800*600, вот я беру свое диалоговое окно в формате png которое, как показывает paint, имеет размер 800*600. Если я уменьшу до ххх*150, то он автоматически уменьшает и длину, т.е. получается НЕ 800*150, А 200*150. smile_13

0
8 Sota   (07.05.15 18:29)
132
Диалоговое окно должно быть по больше части ширины экрана, и во всю "его" высоту. К примеру, если экран 800х600, а диалоговое окно в высоту 200, то надо обрезать его, дабы не было лишнего, т.е. к примеру 800х200, ну или меньшей ширины, как предпочтительней.

0
9 Cordelia_FT   (02.06.15 18:50)
7804
love спасибо!

0
10 Leshiy133   (04.09.15 22:56)
8334
Объясните, пожалуйста, что за:
"Sayer mio is not a function or string"
"Sayer jul is not a function or string"
????

у меня персонажи говорить не могут, ошибка вылетает Т.Т
А они и на экране показаны верно
и в ините прописаны:
$ mio = Character(u'Мио', color="#B22222")
$ jul = Character(u'Джульетта', color="#FF8C00")
cry

0
11 Elebriska   (12.09.15 17:32)
9675
Если Вам ещё нужна помощь - советую проверить наличие самого блока init. Ren'py любит вытворять весёлые вещи...
Сейчас поясню с примерами:

define jul = Character('Джульетта', color="#FF8C00")#такая форма объявления находится ВНЕ БЛОКА init и работает. В случае чего - скопируйте отсюда и вставьте.

init:
$ jul = Character(u"Джульетта", color="#ff8c00")#Здесь блок init есть. Тоже работает.

$ la = Character(u"Лала", color="#ffffff")# А вот эта форма объявления работать не будет (может,когда-то работала,но при проверке сейчас - выдала ошибку),если она не в блоке init.

Собсна,вот.

0
13 Leshiy133   (12.09.15 17:36)
8334
Хм, да у меня всё внутри блока init.
поменял jul на juli - теперь всё показывает, как надо) Пока новых проблем не замечено, но ещё по мере кода не все персонажи появились, чтобы "Заговорить" =))

0
14 Elebriska   (12.09.15 17:43)
9675
Хах, ну точно весёлые вещи

0
15 Leshiy133   (12.09.15 17:48)
8334
ага... он у меня ещё не хотел с true/false работать, когда надо, например, зачесть игроку, что он "уже был в библиотеке" и повторно сцену не показывать)) пришлось делать:
define library = 0
и в библиотеке $ library += 1
Типа балл давать не только за героиню, но и за библиотеку, и потом уже через if library == 1:
прокручивать нужную сцену)
А когда пытался через true/false это провернуть - ваще нифига не получалось.

И у меня почему-то РенПи не признаёт знаки "меньше" и "больше", т.е. стрелки ">" и "<"
Я не могу задать "if jul >= 4:", мне нужно прям строго-строго указывать равное кол-во "if jul == 4". А как сделать если "более 4 баллов" - нипаняяяятна Т.Т ренпи ругается на ">=" символ - хотя в примерах кода в инете именно так написано мол чтобы больше/меньше...

0
16 Elebriska   (12.09.15 18:11)
9675
wow Попробуйте,что ли,обновить его...

0
17 Leshiy133   (12.09.15 18:12)
8334
Не вариант, русская версия только такая. Без перевода я там вообще ничего не пойму)))

0
18 Elebriska   (12.09.15 18:14)
9675
Стоп-стоп-стоп. А вы попробуйте. Там теперь версия мультиязычная,вроде как. Т.е, качаете - там на английском,затем в настройках выбираете язык - он докачивает и переводит о.о По крайней мере,у меня так с последней обновой вышло

0
19 Leshiy133   (12.09.15 18:16)
8334
Хм, а откуда брать? какой номер последней?
И главное - как мне в новый РенПи вместить снова свою игру-проект?! оО он воспримет её заново то хоть???

0
20 Elebriska   (12.09.15 18:21)
9675
О,великие админы,простите за кучу комментов :D
Запускаете ренпи - обновить - он проверяет - говорит,какая версия доступна и спрашивает подтверждение - подтверждаете - обновляет.
Обновила минуту назад, и у меня проекты остались те же. Если у Вас сбросятся - в настройках после выбора языка выберите директорию игры (папка,где у вас все проекты хранятся,т.е,на уровень выше,чем папка с конкретной игрой). Вроде,всё

0
21 Leshiy133   (12.09.15 18:34)
8334
О, ура! Заработало))
if jul >= 5:
"text-text"
else:
pass

ошибок нет, линт не ругается, текст показывается =) мило-мило ^__^ теперь можно работать с условиями меньше-больше, а не только строго-равно))) ихихи))

Спасибушки! happy

0
22 Elebriska   (12.09.15 18:35)
9675
Пожалуйста love

0
12 Elebriska   (12.09.15 17:35)
9675
Ну и, конечно, если через define - то тоже преспокойно в init запихивается

0
23 animeshnica   (28.09.15 22:09)
13694
я попытаюсь сделать офигеную новелу funny happy

0
24 WeiP   (29.12.15 18:19)
21055
Возник вопрос.
Допустим, когда мой персонаж говорит, у него меняются эмоции. Следовательно, голову персонажа нужно показывать всегда с разными эмоциями.
Как это лучше провернуть? smile_57

0
25 AnnaSchwarz   (11.01.16 20:20)
22221
Мне нужно разместить голову так, чтобы на протяжении всей игры она находилась там и не исчезала, не менялась. Где это сделать, а то я вообще не поняла, как размещать голову и куда писать нужный код.
И еще вопрос. Можно ли сделать так, чтобы ГГ "говорил" в диалоговом окне внизу, а фразы остальных персонажей появлялись в виде облачков?

0
27 Colo   (04.11.16 01:27)
46501
А что делать если "голова" находится, уж очень высоко от текста? smile_13

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]