Сайт Anivisual.net закрыт

Он продолжит функционировать в виде архива. Новые материалы добавлять нельзя.

Анимация моргания и рта у спрайтов персонажей.

Анимация моргания и рта у спрайтов персонажей.

Перевод статьи "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
18
Декабрь
4
4.1
17578
Добавлять комментарии могут только зарегистрированные пользователи.

Комментарии к записи: 4

avatar
#1 Dangetsu
1157
в 20:06 (08/Апр/2015)
0
Звучит многообещающе, кто нибудь юзал, как оно в деле?
avatar
#2 FaZz
2158
в 06:42 (18/Июн/2015)
0
Видел как используется. Если правильно анимировать, то выглядит довольно приятно.
avatar
#3 deymod
10708
в 21:35 (27/Июл/2015)
0
бля, смените цвет текста на более чёткий, просто пиздец зрение сломать можно angry
avatar
#4 maLikiz
52233
в 03:21 (10/Фев/2017)
0
Так и не понял для чего нужна первая часть кода (init python):angry:
столько много условий что не стал разбираться и все работает без них