Персонажи В большинстве визуальных новелл, главную роль играют, так называемые персонажи.
И дабы было проще работать с персонажами, в
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
Комментарии к записи: 31
Я уже бьюсь над этим очень долгое время. Надеюсь, что хотя бы здесь мне помогут
в таком случае и для обычного текста будет отступ для картинки, которой нет. а вдруг вы не хотите такого отступа для обычного текста? поможет это:
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)
Точно, забыл упомянуть, спасибо.
"Hello \nWorld!"
Будет как:
"Hello
World!"
Ответ от слоу-слоу-слоупока.
"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")
Сейчас поясню с примерами:
define jul = Character('Джульетта', color="#FF8C00")#такая форма объявления находится ВНЕ БЛОКА init и работает. В случае чего - скопируйте отсюда и вставьте.
init:
$ jul = Character(u"Джульетта", color="#ff8c00")#Здесь блок init есть. Тоже работает.
$ la = Character(u"Лала", color="#ffffff")# А вот эта форма объявления работать не будет (может,когда-то работала,но при проверке сейчас - выдала ошибку),если она не в блоке init.
Собсна,вот.
поменял jul на juli - теперь всё показывает, как надо) Пока новых проблем не замечено, но ещё по мере кода не все персонажи появились, чтобы "Заговорить" =))
define library = 0
и в библиотеке $ library += 1
Типа балл давать не только за героиню, но и за библиотеку, и потом уже через if library == 1:
прокручивать нужную сцену)
А когда пытался через true/false это провернуть - ваще нифига не получалось.
И у меня почему-то РенПи не признаёт знаки "меньше" и "больше", т.е. стрелки ">" и "<"
Я не могу задать "if jul >= 4:", мне нужно прям строго-строго указывать равное кол-во "if jul == 4". А как сделать если "более 4 баллов" - нипаняяяятна Т.Т ренпи ругается на ">=" символ - хотя в примерах кода в инете именно так написано мол чтобы больше/меньше...
И главное - как мне в новый РенПи вместить снова свою игру-проект?! оО он воспримет её заново то хоть???
Запускаете ренпи - обновить - он проверяет - говорит,какая версия доступна и спрашивает подтверждение - подтверждаете - обновляет.
Обновила минуту назад, и у меня проекты остались те же. Если у Вас сбросятся - в настройках после выбора языка выберите директорию игры (папка,где у вас все проекты хранятся,т.е,на уровень выше,чем папка с конкретной игрой). Вроде,всё
if jul >= 5:
"text-text"
else:
pass
ошибок нет, линт не ругается, текст показывается =) мило-мило ^__^ теперь можно работать с условиями меньше-больше, а не только строго-равно))) ихихи))
Спасибушки!
Допустим, когда мой персонаж говорит, у него меняются эмоции. Следовательно, голову персонажа нужно показывать всегда с разными эмоциями.
Как это лучше провернуть?
И еще вопрос. Можно ли сделать так, чтобы ГГ "говорил" в диалоговом окне внизу, а фразы остальных персонажей появлялись в виде облачков?
Сразу же извинюсь,потому что возможно не туда пишу,но мне необходимо узнать как сделать лицо персонажа справа от блока с текстом?
Если я делаю,то у меня текст улетает далеко далеко,а имя скрывается за лицом персонажа.
Помогите.
if side_image:
add side_image
else:
add SideImage() xalign 0.0 yalign # вот это место отвечает за позицию 1.0
~ add SideImage() xalign 1.0 yalign 1.0
Как поменять имя у созданного ранее обьекта Character?
Я так понимаю что это экземпляр класса?
Пробовал так
ma_name.name = new name
но не вышло.
Это возможно?
$ ruru = Character(name="Незнакомка")
ruru "Желаете познакомится?"
$ ruru.name = "Руру"
ruru "Мое имя Руру."
Тут вроде не говорилось, но можно и не объявлять персонажа
"Куру" "А меня зовут Куру."