Показать сообщение отдельно
Старый 24.12.2013, 19:40   #155
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Clear Engine (Понятный движок)

Сообщение от ABTOMAT Посмотреть сообщение
Насчёт ожидания завершения действия.
Вот как сделано это в jQuery:

foobar.animate(params, что-делать-после-завершения-анимации);

На мой взгляд, очень просто этим пользоваться.
Не знаю, правда, возможна ли подобная конструкция на С++
callback'и - это достояние event-driven парадигмы языка.
В C++ ты по сути можешь передать pointer на функцию (самый простой вариант?), если ещё lambda функции (подходят тут?) и anonymous функции (это по сути то что и есть в js).

Да и не jQuery а java-script, т.к. этот паттерн с каллбэками был задолго до jQuery.

Есть ещё promises паттерн, и использует chain'ы для выражения последовательности действий. Круто то что можно иметь динамично определяющуюся цепь анимаций:

player.animation
  
.do('walk')
  .
delay(1000)
  .do(
'run', { speed40 });

...
if (
player.hit) {
  var 
currentAnimation player.animation.current;

  
player.animation
    
.cancel()
    .do(
'hit')
    .
delay('500')
    .do(
curentAnimation);

  if (
curentAnimation == 'run') {
    
player.animation
      
.params({ speed20 })
      .
delay(1000)
      .
params({ speed40 })
  }

Как пример набросок, это паттерн chaining. Анимирует походку затем через секунду начинает бежать быстро. Где-то в цикле, если игрока ударили, отменяет текущую анимацию, затем анимирует что его ударили, затем через 500 мс возвращает предыдущую анимацию. Если она была "бег", то сперва поставит медленный бег, затем через секунду обратно на скорость 40.
Как пример.

Суть в том что есть цепь действий которой ты можешь манипулировать. Естественно такая цепь в данном примере имеет кучу недостатков, например в данном примере описан весь персонаж, и нету идеи отдельных частей анимации (морфинг и т.п.). Таким образом не решена проблема в том что когда персонаж в анимации бежит, анимация когда ударят не морфится.

Но удобство в том что ты можешь добавлять в цепочку разные стейты, отменять их, и манипулировать по разному. Также дать разрабу возможность расширять цепочку и влиять на стейт прямым образом.


Самый простой пример использования:
player.animation.do('run'); 
Установит анимацию на бег.
По сути разраб может юзать такой фреймворк как угодно, используя chaining или не используя и менеджить это сам.

Но главная суть в том что под этим фреймворком анимации должен быть прямой доступ к самой анимации - тупо менять кейфреймы и т.п.
Чтобы разраб мог бы вообще сам это манипулировать.
И даже с использованием данного фреймворка, дать разрабу возможность манипулировать напрямую нижним уровнем.


Имея примитивные методы работы с костями, группами костей, установки кадра кости/группы - по сути самое примитивное, что должен иметь изначально разраб. Это даст ему возможность уже анимировать. Далее не теряя возможности иметь такой низкий уровень, добавляй слоёв, но таким образом что нижний слой об этом и не догадывается.

И разраб уже сам выберет что ему по душе.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pozitiffcat (25.12.2013)