В очередной раз спросили про говорящие головы, а я ими не пользуюсь. Но пусть будет пример с конструктором персонажей для экономии спрайтов и занимаемого проектом места.
# модуль содержит конструктор персонажей, # который перебирает всех персонажей из списка, # прикручивает им головы из списка эмоций # и создает самого персонажа # в папке 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
Комментарии
Отправить комментарий