Выделение говорящего цветом (версия 2)
Перейти к навигации
Перейти к поиску
- Преимущества данного способа
- Renpy сам определяет, говорит ли персонаж в данный момент, значительно сокращается размер кода в скрипте новеллы
- Можно использовать уже объявленные изображения, а не только файлы спрайтов
- Недостатки
- При объявлении персонажа и его спрайта нужно использовать дополнительные параметры, функции
- Изменяется только цвет, размеры остаются прежними
init python:
# автоматическое объявление картинок из модуля 7dots.rpy (без него проект не будет работать)
images_auto()
window_center()
# переменная для хранения имени говорящего
speaking = None
# степень яркости цветов, 1.0 - полноцвет
blind = .35
# для выбора состояния спрайта - полноцвет/бледный
def while_speaking(name, speak_d, done_d, st, at):
if speaking == name:
# цветной, если говорит в данный момент
return speak_d, None
else:
# бледный, если молчит (функция из модуля 7dots.rpy)
done_d = LiveBlind(speak_d, blind)
return done_d, None
curried_while_speaking = renpy.curry(while_speaking)
# для создания динамического изображения, состояние которого зависит от переменной
def WhileSpeaking(name, speaking_d):
return DynamicDisplayable(curried_while_speaking(name, speaking_d, speaking_d))
# для определения имени персонажа, который в данный момент что-то говорит
# имя сохраняется в переменной speaking
def speaker_callback(name, event, **kwargs):
global speaking
if event == "show":
speaking = name
elif event == "end":
speaking = None
Speaker = renpy.curry(speaker_callback)
init:
# задаем имя персонажа и привязываем его к персонажу, который умеет менять цвет
define b = Character(u"Мальчик", callback=Speaker("b"), color="#64f")
# создаем изображение, которое привязано к созданному выше персонажу
# "boy ok0" - имя объявленной картинки спрайта, эквивалентно images/boy_ok0.png для необъявленной
image boy ok = WhileSpeaking("b", "boy ok0")
# то же для остальных персонажей
define g = Character(u"Девочка", callback=Speaker("g"), color="#f22")
image girl ok = WhileSpeaking("g", "girl ok0")
# обычное использование спрайтов
label start:
scene black with None
scene bg1
show boy ok at left2
show girl ok at right2
with dissolve
"Поехали."
b "Я - мальчик. Я цветной, но только когда говорю."
g "Я - девочка. Я тоже цветная, только когда говорю."
"А пока они молчат - оба бледные, как поганки."
scene black
with dissolve
return
- Сссылка на архив с тестовым проектом: test-persact2.zip
- Источник: Renpy для чайников: Выделение говорящего цветом (версия 2)
На главную страницу | Книга рецептов Энциклопедии Ren'Py | Renpy для чайников | Вернуться к началу статьи |