Моргание и открывание рта (Blink And Lip Flap)
Что делать, если у вас есть персонаж и вы хотите, чтобы он периодически моргал, а его рот двигался, когда он говорит?
Сначала добавьте код для анимации рта в отдельную часть вашего скрипта:
init python:
# Здесь устанавливается имя персонажа, которой говорит или
# значение None, если ни один персонаж в настоящий момент не говорит.
speaking = None
# Возвращает значение speaking, если персонаж говорит, и значение done, если
# персонаж молчит.
def while_speaking(name, speak_d, done_d, st, at):
if speaking == name:
return speak_d, .1
else:
return done_d, None
# Производная форма вышеуказанного кода.
curried_while_speaking = renpy.curry(while_speaking)
# Выводит speaking, когда названный персонаж говорит, а иначе - done.
def WhileSpeaking(name, speaking_d, done_d=Null()):
return DynamicDisplayable(curried_while_speaking(name, speaking_d, done_d))
# Обратный вызов содержит переменную speaking.
def speaker_callback(name, event, **kwargs):
global speaking
if event == "show":
speaking = name
elif event == "slow_done":
speaking = None
elif event == "end":
speaking = None
# Производная форма того же кода.
speaker = renpy.curry(speaker_callback)
Далее, определяется персонаж и его изображение. При рисовании персонажа, разделим его спрайт на тело, глаза и рот. (359, 927) – длина и высота персонажа. (101, 50) – смещение по оси Y и X от верхнего левого угла для моргающих глаз, тогда как (170, 144) – смещение по оси Y и X для движения губ.
Если слои с глазами и ртом того же размера, что и собственные глаза и рот самого персонажа, смещение по оси Y и X должно быть (0, 0).
# Создайте такого персонажа.
define girl = Character("Girl", callback=speaker("girl"))
# Соединение элементов, чтобы сделать моргающего и открывающего рот персонажа
image girl normal = LiveComposite(
(359, 927),
(0, 0), "base.png",
(101, 50), "girl eyes normal",
(170, 144), WhileSpeaking("girl", "girl mouth normal", "mouth_closed.png"),
)
image girl eyes normal:
"eye_open.png"
choice:
4.5
choice:
3.5
choice:
1.5
# Рандомизирует период времени между морганием.
"eye_closed.png"
.25
repeat
image girl mouth normal:
"mouth_speak1.png"
.2
"mouth_speak2.png"
.2
repeat
Теперь выбранный персонаж будет говорить и моргать машинально. Если вы хотите, чтобы персонаж только открывал рот, удалите "girl eyes normal" из вышеуказанного кода, включая LiveComposite.
# Игра начинается здесь.
label start:
scene black
show girl normal
"Молчит."
girl "Сейчас я разговариваю. Бла-бла-бла-бла-бла."
"Замолчала."
girl "Сейчас я вновь разговариваю. Бла-бла-бла-бла-бла-бла-бла."
Этот код был адаптирован из первоначального кода, созданного PyTom в этой теме.
Источник[править | править код]
Статья "Blink And Lip Flap" на английском языке
На главную страницу | Книга рецептов Энциклопедии Ren'Py | Книга рецептов Ren'Py | Вернуться к началу статьи |