Давайте возьмем ситуацию, когда у вас есть RPG с заклинаниями, и каждая анимация заклинания имеет разное количество кадров, и у них очень разные требования к звуковым эффектам. Предположим, что каждое заклинание имеет только 1 непрерывную анимацию, связанную с ним (в отличие от нескольких модульных фигур, которые используются для формирования полной анимации), как в старых 16-битных играх Final Fantasy.
Единственный способ убедиться, что звуки и анимация синхронизированы, это:
- Получить количество кадров анимации.
- Получите время между каждым кадром анимации. (если это 30 кадров в секунду, то это 1/30 секунды на кадр.)
- Затем создайте звуковой файл точно такой же длины, что и анимация.
Таким образом, это означает, что если анимация длится 5 секунд, работает со скоростью 30 кадров в секунду и имеет в общей сложности 150 кадров, звуковой файл также будет иметь длину 5 секунд. Если анимация должна иметь «ударный» звук на 30-м кадре, это означает, что звуковой файл будет содержать звук удара на отметке 1,0 секунды.
В конце мы одновременно запускаем анимацию и звуковой эффект и надеемся, что кадры и звук синхронизируются.
Похоже, что это может создать проблемы, когда кадры пропускаются или что-то происходит во время анимации, и звук воспроизводится немного слишком рано или слишком поздно, что приведет к потере синхронизации звука и анимации. Это лучший подход, или я обычно не вижу лучшего способа?
Ответ не обязательно должен быть конкретно для Cocos2D, если это концептуально, но если есть конкретное решение для cocos2d, я бы хотел услышать его.
РЕДАКТИРОВАТЬ: Я просто также понимаю, что с этим методом, если нам случится войти и настроить количество кадров или время анимации позже, мы ДОЛЖНЫ также вернуться и изменить звуковой файл. Это звучит как ужасная причина человеческой ошибки (забыв обновить звуковые файлы после смены анимации). Я надеюсь, что есть лучшие методы.