Nehmen wir eine Situation, in der Sie ein Rollenspiel mit Zaubersprüchen haben und jede Zauberanimation eine andere Anzahl von Frames hat und sehr unterschiedliche Anforderungen an Soundeffekte stellt. Nehmen wir an, dass jedem Zauber nur eine fortlaufende Animation zugeordnet ist (im Gegensatz zu mehreren modularen Teilen, die zur Erstellung einer vollständigen Animation verwendet werden), wie bei den alten 16-Bit-Final-Fantasy-Spielen.
Der einzige Weg, den ich mir vorstellen kann, um sicherzustellen, dass die Sounds und Animationen synchronisiert werden, ist:
- Ermitteln Sie die Anzahl der Frames einer Animation.
- Holen Sie sich die Zeit zwischen jedem Bild der Animation. (Wenn es 30 fps ist, ist es 1/30 Sekunde pro Frame.)
- Erstellen Sie dann eine Audiodatei, die genau so lang ist wie die Animation.
Das heißt, wenn eine Animation 5 Sekunden lang ist und mit 30 fps und insgesamt 150 Bildern ausgeführt wird, ist die Audiodatei ebenfalls 5 Sekunden lang. Wenn die Animation im 30. Bild einen "Aufprall" -Sound haben soll, bedeutet dies, dass die Sounddatei den Aufprallton bei der 1,0-Sekunden-Marke enthält.
Am Ende starten wir die Animation und den Soundeffekt genau zur gleichen Zeit und hoffen, dass die Frames und der Sound synchronisiert werden.
Dies scheint Probleme zu verursachen, wenn Frames übersprungen werden oder während der Animation etwas passiert und der Sound etwas zu früh oder zu spät abgespielt wird und der Sound und die Animation nicht mehr synchron sind. Ist das der beste Ansatz oder gibt es normalerweise einen besseren Weg, den ich einfach nicht sehe?
Die Antwort muss nicht unbedingt speziell für Cocos2D sein, wenn es konzeptionell ist, aber wenn es eine spezifische Lösung für cocos2d gibt, würde ich sie gerne hören.
BEARBEITEN: Mir ist nur auch klar, dass wir bei dieser Methode, wenn wir die Anzahl der Frames oder das Timing der Animation später anpassen, auch zurückgehen und die Sounddatei ändern müssen. Dies klingt nach einer schrecklichen Ursache für menschliches Versagen (das Vergessen, Sounddateien nach dem Ändern der Animation zu aktualisieren). Ich hoffe, es gibt bessere Methoden.