Achso, ja, sorry, die Frage hatte ich ganz vergessen. Ich finde es wirklich OK so, wie es ist. Außer der Soundmanager, da würde ich die Liste der geladenen Sounds ein wenig anders machen (außerdem sollte sie mehr als 10 Sounds speichern können). Z.B. so:
|
Quellcode
|
1
2
3
4
5
6
|
struct SSoundListEntry
{
char acFilename[256]; // Dateiname dieses Sounds
int iNumSoundBuffers; // Anzahl der Soundpuffer
LPDIRECTSOUNDBUFFER ppBuffers; // Dynamisches Array mit den Puffern
};
|
Die DirectSound-Klasse hält dann eine dynamische Liste mit SSoundListEntry-Strukturen gespeichert, deren Größe sie auch bei Bedarf verändern kann.
Beim Laden gibt man dann den Dateinamen und die Anzahl der Soundpuffer an. Die Ladefunktion erstellt einen Puffer und klont die restlichen (IDirectSound::CloneSoundBuffer).
Das hat einen Vorteil: wenn ein und der selbe Sound mehrfach gleichzeitig abgespielt werden soll, dann hat man einfach mehrere Soundpuffer dafür, die intern alle den gleichen Speicherbereich benutzen (dafür sorgt CloneSoundBuffer).
Beim Abspielen musst Du dann einfach nur die Liste der Puffer durchgehen und nach einem suchen, der gerade nicht abgespielt wird.