Перевод статьи "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))
# Этот callback-вызов содержит переменную 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)
Дальше следует определить персонажа через define и его изображения через image. При создании спрайта, его следует разделить на тело, глаза и рот. В данном примере (359, 927) - это ширина и высота спрайта. (101, 50) - это смещение глаз по осям X и Y относительно верхнего левого края экрана, а (170, 144) - это аналогичное смещение для рта.
Если изображения глаз и рта того же размера, что и спрайт персонажа, X и Y смещение должно быть установлено на (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
Теперь наш персонаж будет моргать и шевелить губами автоматически. Если вам нужно только моргание/разговор - удалите соответствующий им код анимации и код из LiveComposite.
Код
# Игра начинается здесь:
label start:
scene black
show girl normal
"Не говорит..."
girl "Сейчас я говорю. Бла-бла-бла-бла-бла-бла-бла-бла."
"Снова тишина..."
girl "Меня так просто не заткнуть! Бла-бла-бла-бла-бла-бла-бла-бла!"
Перевёл: Tasuke. Ссылка на оригинальную статью:
Blink And Lip Flap
Комментарии к записи: 4
столько много условий что не стал разбираться и все работает без них