Vamos dar uma situação em que você tem um RPG com feitiços e cada animação de feitiço tem um número diferente de quadros e eles têm requisitos muito diferentes para efeitos sonoros. Vamos supor que cada feitiço tenha apenas 1 animação contínua associada (em oposição a várias peças modulares usadas para formar uma animação completa), além dos antigos jogos de 16 bits de Final Fantasy.
A única maneira de pensar para garantir a sincronização de sons e animações é:
- Obter o número de quadros de uma animação.
- Obtenha o tempo entre cada quadro da animação. (se for 30 qps, será 1/30 de segundo por quadro.)
- Em seguida, crie um arquivo de som com exatamente o mesmo comprimento da animação.
Portanto, isso significa que se uma animação tiver 5 segundos, rodando a 30 qps, com um total de 150 quadros, o arquivo de som também terá 5 segundos. Se a animação tiver um som de "impacto" no 30º quadro, isso significa que o arquivo de som incluirá o som do impacto na marca de 1,0 segundo.
No final, iniciamos a animação e o efeito sonoro exatamente ao mesmo tempo e esperamos que os quadros e o som sejam sincronizados.
Parece que isso pode causar problemas quando os quadros são ignorados ou algo acontece durante a animação e o som é reproduzido um pouco cedo ou tarde demais, e fará com que o som e a animação fiquem fora de sincronia. Essa é a melhor abordagem ou geralmente há uma maneira melhor que eu simplesmente não estou vendo?
A resposta não precisa necessariamente ser para o Cocos2D especificamente se for conceitual, mas se houver uma solução específica para o cocos2d, eu adoraria ouvi-lo.
EDIT: Eu também percebi que, com esse método, se ajustarmos o número de quadros ou o tempo da animação posteriormente, DEVEMOS também voltar e alterar o arquivo de som. Isso soa como uma causa terrível de erro humano (esquecendo de atualizar os arquivos de som após a alteração da animação.) Espero que haja métodos melhores por aí.