SDL - Wie fragt man ab, ob ein bestimmter Sound gerade läuft??
-
...!?
Also ich hab z.B. fünf Gegner-Instanzen die alle zu verschiedenen Zeitpunkten schießen und nun will ich bei der PlaySound-Funktion abfragen
//Pseudocode PlaySound (soundXY) { if (soundXY == läuft) { soundXY->stop (); soundXY->abspielen (); } // d. h. den Sound wenn er schon läuft nochmal VON VORNE abspielen // und natürlich else soundXY->abspielen (); }
Da ich ja nicht weiss ob der Sound jetzt gerade läuft oder nich...
-
Du sorgst doch selbst dafuer, das der Sound ablaeuft, also musst du es doch wissen! f'`8k
AutocogitoGruß, TGGC (Das kommt gut)
-
dukems2112 schrieb:
Jetzt will ich mit einer Funktion prüfen, ob ein ganz bestimmter Sound in meinem Spiel gerade läuft oder nicht
spiele den sound auf einem bestimmten channel ab, ueber die funktion zu der du verlinkt hast kannst du dann ja abfragen ob dieser channel spielt
-
rapso schrieb:
spiele den sound auf einem bestimmten channel ab
DAs dachte ich auch erst, aber das hieße ja dass ich jeden Channel nur für einen einzigen Sound nutzen kann, dass dieser spezifische Channel dann sozusagen für diesen Sound reserviert is..!?
-
dukems2112 schrieb:
rapso schrieb:
spiele den sound auf einem bestimmten channel ab
DAs dachte ich auch erst, aber das hieße ja dass ich jeden Channel nur für einen einzigen Sound nutzen kann, dass dieser spezifische Channel dann sozusagen für diesen Sound reserviert is..!?
jap, das ist eine moeglichkeit.
oder du suchst dir immer den naechst freien channel aus, du merkst dir dann pro channel welchen sound du abspielst und pro sound in welchem channel der war. so kannst du dann testen ob die beiden immer noch aufeinander referenzieren und falls ja, ob der sound noch spielt.
falls sie nicht mehr aufeinander referenzieren, dann war der channel wohl schon fertig mit abspielen und spielt(e) nen neuen sound ab.ich hoffe ich hab es einigermassen verstaendlich erklaert
-
@rapso: Das macht trotzdem nicht viel Sinn, schliesslich sind dies alles bekannte Informationen. Es ist ja nicht so, das mal gerade ein fremdes Programm daherkommt und einem die Sounds deaktiviert, so das man sich staendig bei Soundtreiber versichern muss: hey, laeuft mein Sound noch? Ausserdem gibts fuer solche Sachen auch Callbacks -> besser als Polling. f'`8k
AutocogitoGruß, TGGC (Das kommt gut)
-
@rapos: hm, okay, das klingt aber einigermaßen kompliziert ^^! Hab da gestern erstmal selbst noch ne Idee bekommen...
Und zwar handhabe ich meine Sounds intern mit einer Liste (Multimap) in die eim Boot alle sounds reingeladen werden, und so funktioniert dann auch das abspielen: jeder Eintrag in der Map ist a) ein String mit dem Namen den ich dem Sound intern gebe und b) ein Zeiger auf den Sound (also das Mix_Chunk) selbst.
Jetzt kam mir die Idee dass ich einfach den Namen des Sounds, also den STRING in einen Integer umwanlde (ASCII ?) und diese Zahl dann als den Channel verwende, auf welchem ich den Sound abspiele - somit wäre garantiert (sofern keine Sounds gleich heißen, worauf ich achten werde) dass jeder Sound seinen eigenen Channel hat auf dem nur er abgespielt wird ohne dass ich dafür extra eine Liste + Übersicht oder so anlegen muss, welcher Channel denn nun für welchen Sound fesgelegt ist.Mein Problem: Ich bekomme das mit dem casten nicht hin :)! Hab mich gestern mal umgeguckt und ne Stunde rumprobiert aber ohne Erfolg - wie kann ich denn nen String in nen Integer (oder vergleichbares) umwandeln? Konnte das weder mit atoi () noch mit der istringstream umsetzen weil ich immer eine fehlerhafte Typumwandlung erhalte.
Wenn mir bei dem Typenumwandeln schnell jemand helfen könnte, wäre mein Problem, glaube ich gelöst!
-
welchen integerwert sollte denn etwas wie "explosion.wav" haben?
-
Naja ich dachte mir man kann doch die einzelnen Chars des Strings in die entsprechenden dezimalen oder hexa-dezimalen Werte umwandeln und dann in einen String hauen.
Für den String "Schuss1" wäre das zum Beispiel 83 99 104 usw., bzw. hexadezimahl 53 63 68 usw.
Die Zahlen könnte ich dann entweder in eine Int-Variable ddieren (wäre einfacher, aber hierbei wäre Verwechslung möglich) oder noch besser - aber das weis ich auch noch nich wie das zu machen is - dass die Zahlen praktisch hintereinander in den String geschrieben werden, wenn das irgendwie geht, also sprich dass zb int a = 83;, a += 99; ergäbe a = 8399 (natürllich ist der += Operator jetzt nur symbolisch)...Wie kann man das machen? Vor allem erstmal die String in ASCII (dezimal) Umwandlung (und somit in int)?
-
Das hoert sich alles nach ziemlichen Schwachsinn an. Das ist wie als ob ich die Explosion fuer den Schuss auf den Bildschirm pinsele und dann denke ich mir ploetzlich: ach, ich lese mal schnell den Backbuffer aus, ob die Explosion auch wirklich zu sehen ist. f'`8k
AutocogitoGruß, TGGC (Das kommt gut)