Consideremos una situación en la que tienes un juego de rol con hechizos y cada animación de hechizo tiene un número diferente de fotogramas y tienen requisitos muy diferentes para los efectos de sonido. Supongamos que cada hechizo tiene solo 1 animación continua asociada (a diferencia de las múltiples piezas modulares que se utilizan para formar una animación completa) en los viejos juegos de 16 bits de Final Fantasy.
La única forma en que puedo pensar para asegurarme de que los sonidos y las animaciones se sincronicen es:
- Obtener el número de cuadros de una animación.
- Obtenga el tiempo entre cada cuadro de la animación. (si son 30 fps, entonces es 1/30 de segundo por fotograma).
- Luego, cree un archivo de sonido que tenga exactamente la misma longitud que la animación.
Esto significa que si una animación dura 5 segundos y se ejecuta a 30 fps, con un total de 150 fotogramas, el archivo de sonido también durará 5 segundos. Si la animación debe tener un sonido de "impacto" en el cuadro 30, eso significa que el archivo de sonido incluirá el sonido de impacto en la marca de 1.0 segundo.
Al final, comenzamos la animación y el efecto de sonido exactamente al mismo tiempo y esperamos que los cuadros y el sonido se sincronicen.
Parece que podría plantear problemas cuando se omiten los fotogramas o sucede algo durante la animación y el sonido se reproduce un poco demasiado pronto o demasiado tarde, y hará que el sonido y la animación no estén sincronizados. ¿Es este el mejor enfoque o generalmente hay una mejor manera que simplemente no estoy viendo?
La respuesta no necesariamente tiene que ser para Cocos2D específicamente si es conceptual, pero si hay una solución específica para cocos2d, me encantaría escucharla.
EDITAR: también me doy cuenta de que con este método, si entramos y ajustamos el número de fotogramas o el tiempo de la animación más tarde, también DEBEMOS regresar y cambiar el archivo de sonido. Esto suena como una causa terrible de error humano (olvidando actualizar los archivos de sonido después del cambio de animación). Espero que haya mejores métodos disponibles.