Анимация моргания и рта у спрайтов персонажей.
Перевод статьи "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

Автор материала: Tasuke
Материал от пользователя сайта.



Ren'Py 10.03.15 5594 Tasuke ren'py, Спрайты, Python, каррирование, разработка, анимация, callback, моргание, программирование 5.0/6

Комментарии (3):
0
1 Dangetsu   (08.04.15 21:06)
1157
Звучит многообещающе, кто нибудь юзал, как оно в деле?

0
2 FaZz   (18.06.15 07:42)
2158
Видел как используется. Если правильно анимировать, то выглядит довольно приятно.

-2
3 deymod   (27.07.15 22:35)
10708
бля, смените цвет текста на более чёткий, просто пиздец зрение сломать можно angry

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]