Говорящие головы
Перейти к навигации
Перейти к поиску
В очередной раз спросили про говорящие головы, а я ими не пользуюсь. Но пусть будет пример с конструктором персонажей для экономии спрайтов и занимаемого проектом места.
# модуль содержит конструктор персонажей,
# который перебирает всех персонажей из списка,
# прикручивает им головы из списка эмоций
# и создает самого персонажа
# в папке images должна быть папка side
# в ней подпапки с именами персонажей для хранения их эмоций
# а так же в папке images должны быть файлы тел с именами персонажей,
# но без голов
# чтобы воспользоваться модулем вам нужно всего лишь заполнить список
# chars кортежами из имени спрайта, имени персонажа и цвета имени
# ("dane", _(u"Дэйн Торсон"), "#fff")
init python:
# автоматическое объявление изображений
config.automatic_images_minimum_components = 1
config.automatic_images = [' ', '_', '/']
config.automatic_images_strip = ["images"]
# список героев, которых нужно сконструировать
# псевдоним для спрайтов и имя на экране
chars = [("dane", _(u"Дэйн Торсон"), "#fff"), ("vera", _(u"Вера"), "#cdf")]
# список доступных эмоций
zemo = ["ok", "angry", "smile"]
# размеры спрайта по умолчанию
default_width = 600
default_height = 1080
# отступы к голове по умолчанию
# на случай, если изображения головы будут меньше, чем на спрайте
default_xoffset = 0
default_yoffset = 0
# всё, что дальше менять не стоит :)
# конструктор персонажа
def make_character(name, width=default_width, height=default_height, xoffset=default_xoffset, yoffset=default_yoffset):
# перебираем эмоции
for emo in zemo:
# имя спрайта для эмоции
face = "side " + name + " " + emo
# тело/основа + эмоция
args = [(width, height), (0, 0), name, (xoffset, yoffset), face]
# собираем в спрайт
renpy.image(name + " " + emo, LiveComposite(*args, align=(.5, 1.0)))
# собрать всех персонажей
for nick, name, color in chars:
# собираем большие спрайты из безголового тела и голов с эмоциями
if nick == "vera":
# спрайт-исключение
make_character(nick, 950, 1080, 250)
else:
# стандартные спрайты
make_character(nick)
# голова для пустой эмоции из ok.png
renpy.copy_images("side " + nick + " ok", "side " + nick)
# задаем персонажу имя и говорящую голову
# можно добавить цвет имени и прочие атрибуты персонажей
globals()[nick] = Character(name, image=nick, who_color=color)
init:
transform ax(x=.5):
xalign x
# Игра начинается здесь:
label start:
scene bg caffee
show dane ok
with dissolve
dane "Привет, я - Дэйн Торсон. Это пример того, как в Ren'Py сделать говорящие головы."
dane angry "Сейчас я должен разозлиться."
dane smile "Теперь - улыбнуться."
show dane smile at ax(.25)
show vera ok at ax(.75)
with moveinright
vera "А я - Вера. Желаю всем здравствовать."
vera smile "Я здесь в качестве исключения. Как большой спрайт, из которого вырезали головы на некотором расстоянии от края."
return
- Ссылка на архив с проектом: test_sideimages.zip
- Источник: Renpy для чайников: Говорящие головы
На главную страницу | Книга рецептов Энциклопедии Ren'Py | Renpy для чайников | Вернуться к началу статьи |