Hintergrungmusik abspielen 3D-Soundeffekte einsetzen.

Slides:



Advertisements
Ähnliche Präsentationen
Blue J.
Advertisements

Präsentation PS: Klasse File von Janko Lange, Thomas Lung, Dennis Förster, Martin Hiller, Björn Schöbel.
1 Funktionstemplates Einbinden von Templates: –Eine *.o Datei, die durch Übersetzen einer Datei nur mit Templates erzeugt wurde, enthält keinen Programmcode.
Objektorientierte Programmierung
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
1. 2 Heute entwickeln wir eine kleine DirectInput-Bibliothek,auf die wir bei unseren zukünftigen Projekten immer wieder zurückgreifen werden. Die Themen.
Referat zum Thema: Soundkarte Von Julian Weger IT-Klasse 2482.
Datenstrukturen Look-Up Tabellen, Zufallszahlen, Listen, Speichermanagement und Dateiverwaltung.
Ultris Version 8: Erzeugen der Formen und Anzeigen der Vorschau
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Java: Grundlagen der Objektorientierung
Ein Beispiel in Java.
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
V10: Bewegen der Formen und Kollisionserkennung Steuerung der Spielsteine durch Tastenbefehle (Übersicht der Befehle unter der Hilfe)
V09 Fallende Formen, Geschwindigkeitsregelung und Timing Daniel Ebner Spieleprogrammierung mit DirectX und C++
Tag 2 Look-up-Tabellen, Zufallszahlen, Listen, Speichermanagement und Dateiverwaltung Quelle: 3D-Spiele mit C++ und DirectX in 21 Tagen, Alexander.
Nils Jagdfeld, Patrick Gunia
Vers. 6: Der Konfigurationsdialog Quelle: Spieleprogrammierung mit DirectX und C++, U. Kaiser und P. Lensing, Galileo Computing (2007)
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 10 Claudio Moraga; Gisbert Dittrich FBI Unido
Fliegengewicht Ein objektbasiertes Strukturmuster.
Programmieren mit JAVA
Programmieren mit JAVA
Zusammenfassung Vorwoche
Vorlesung, Wintersemester 2009/10M. Schölzel 1 Optimierungstechniken in modernen Compilern Optimierungstechniken für SMP- Architekturen.
Objektorientierte Programmierung
DVG Klassen und Objekte
Wir müssen also überlegen: Implementierung der Knoten, Implementierung der Kanten, daraus: Implementierung des Graphen insgesamt. Annahme: die Knoteninhalte.
3D Programmierung Version 12 - Highscores. Die vom Spieler erzielte Punktzahl wird mit 5 vorgegebenen Punktzahlen verglichen und, falls nötig, in die.
FH-Hof 1 XML-Parser Richard Göbel. FH-Hof 2 XML-Parser- DOM Object Tree Parser Objekt der Klasse 'DocumentBuilderFactory' mit 'newInstance()' erzeugen.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Einfach verkettete Listen (OOP)
Von Tom Wehnert & Konstantin Preißer
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Vortrag D. Braun, Praktikum. Übersicht Pleopatra API Pleopatra Tools Twitter Demonstration Ausblick.
Was ist Multimedia? Multimedia = Nutzungsmöglichkeit verschiedener Medien (Text, Bild, Ton) über ein Gerät (PC) Beispiele Abspielen von Film- oder Musik-CDs.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 12/13 Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung.
Von der Planung bis zum Hauptmenü Seminar: Softwaretechnologie II Dozent: Prof. Manfred Thaller Referent: Jan Bigalke.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Programmiersprache C 4
Informatik 1 Letzte Übung.
Dynamische Datentypen
Aufgaben Version 1: Es soll eine Wetterstation mit folgenden zwei Anzeigen implementiert werden: Aktuelle Wetterbedingungen mit Temperatur und.
Programmbereich, zu dem eine Deklaration gehört Arten von Gültigkeitsbereichen -Namespace : Deklarationen von Klassen, Interfaces, Structs, Enums, Delegates.
Objectives Verstehen was unterDelegate verstanden wird
TDD mit MSTest Stefan Lieser Web:
TDD mit MSTest Stefan Lieser
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
1. Charakteranimation 2. PlugIns schreiben und laden Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung WS 2010/2011.
1 // Heap als ADT // JW: V1.0 // Vorlage gemaess EED-Quelltext // #include #include // für double pow (double d, int i) #include // fuer INT_MIN.
Synthetisierung von Audio und MIDI Referent Sebastian Frielitz.
Paul, Morten, Yannick Blue J. Entwicklungsumgebung  versteht Java Programmcode  Für die Entwicklung eigener Software  Durch die Programmierung.
Objektorientierte Programmierung (OOP)
Wien Fotos, Audio und Video Multimedia in Android.
Mp3 und co. – Audiobearbeitung am PC. Vorteile Audio am PC Audiofiles lassen sich einfacher verwalten und weiter verarbeiten als Kassettenaufnahmen.
Tutorium Software-Engineering SS14 Florian Manghofer.
C++ FÜR cOMPUTERSPIELENTWICKLER
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Implementieren von Klassen
3. Die Datenstruktur Graph 3.2 Repräsentation von Graphen
1. Die rekursive Datenstruktur Liste 1
 Präsentation transkript:

Hintergrungmusik abspielen 3D-Soundeffekte einsetzen

DirektX Audion und Hintergrundmusik DirectX 8 DirectMusik DirectSound DirectX Audio Folgende Klassen wurden eingeführt: CMusicManager CMusicSegment CMusicScript DirectX 9 Bekam zusätzlich die Klasse C3DMusicSegment, die den Einsatz von 3D-Sondeffekten erleichtert. Deklaration und Implementierung der Klassen in dmutil.h/cpp Wir spielen Musik mit Hilfe der Klassen CMusicManager und CMusicSegment ab. Alle hierfür notwendigen Funktionalitäten sind in der Datei GoodSound.h implementiert. Die Datei wird auf folgende Weise in unser Projekt eingebunden: …. #include „GoodSound.h“ // neu void InitSpieleinstellungen (void); void CleanUpD3D(void); void InitD3D(void); void Init_View_and_Projection_Matrix(void); void Show_3D_Scenario(void); void PlayBackgroundMusic (long Nr); // neu void StopBackgroundMusic (long Nr); // neu #include „GiveInput.h“ // neu

GoodSound.h // GoodSound.h --- Sound und Musik #include "dmutil.h" // GLOBALS CMusicManager* g_pMusicManager = NULL; // Soundobjekte: CMusicSegment* g_pBackgroundMusic = NULL; // Funktionsprototypen void CreateSoundObjects(HWND handle); void DestroySoundObjects(void); // INLINES } inline void PlayMusic(CMusicSegment* pSound ) { if(pSound) pSound->Stop(DMUS_SEGF_DEFAULT ); if(pSound) pSound- >SetRepeats(DMUS_SEG_REPEAT_INFINITE ); if(pSound) pSound->Play( DMUS_SEGF_DEFAULT ); } inline void StopMusic(CMusicSegment* pSound ) { if( pSound ) pSound->Stop(DMUS_SEGF_DEFAULT ); } inline void NewVolume( long Volume ) { // wirkt sich auf alle Musik und Sound-Segmente aus g_pBackgroundMusic->SetVol(Volume ); } // Funktionsdefinitionen void CreateSoundObjects(HWND handle) { // CMusicManager-Objekt erzeugen: g_pMusicManager = new CMusicManager(); g_pMusicManager->Initialize(handle); g_pMusicManage-> CreateSegmentFromFile(&g_pBackgroundMusic, "Backgroundmusic.wav"); } void DestroySoundObjects(void) if(g_pMusicManager) g_pMusicManager->StopAll(); SAFE_DELETE(g_pBackgroundMusic) SAFE_DELETE( g_pMusicManager )

Abspielen und Beenden von Hintergrundmusik Der Aufruf von den Funktionen PlayMusic() und StopMusic() erfolgt nicht direkt, sondern durch die Funktionen PlayBackgroungMusic() und StopBackgroundMusic(). Die Auswahl eines Musiksegments erfolgt durch einen Index: // Funktionen zum Abspielen und Stoppen der Hintergrundmusik void PlayBackgroundMusic(long Nr) { if(Nr == 1) PlayMusic(g_pBackgroundMusic); } void StopBackgroundMusic(long Nr) { if(Nr == 1) StopMusic(g_pBackgroundMusic); } Damit beide Methoden bei Programmstart bzw. -ende durch die Methoden GameInitialisierungs Routine() bzw. GameCleanUpRoutine() Aufgerufen werden, müssen sie in in der Datei GameRoutines.h als Externals deklariert werden.

3D-Sound-Demoprogramm MIDI -MIDI (Musical Instrument Digital Interface) -stellt keine Klänge dar, besteht aus Befehlen zur Ansteuerung von Instrumenten oder einer Soundkarte. -Qualität der Wiedergabe abhängig von der Soundkarte. WAVE - WAVE - Format zur digitalen Speicherung von Audiodaten. - Beansprucht viel Speicherplatz, klingt aber beim Abspielen besser.

Arbeitsweise von DirectX Audio Für jedes Soundsample legt man einen sekundären Soundbuffer an. Wenn mehrere Samples abgespielt werden sollen, werden sie in den primären Soundbuffer kopiert und abgemischt. Sekundäre Soundbuffer Primärer Soundbuffer 3D-Sound wird mit Hilfe von AudioPath erzeugt. AudioPath enthält: -3D-Soundbuffer -3D-Sound-Listener Der Klang hängt ab von : -der Position und Geschwindigkeit der Schallquelle -der Position, Geschwindigkeit und Orientierung des Listeners. Die Orientierung des Listeners wird durch zwei Vektoren beschrieben: -Kopfhaltung- vOrientTop -Blickrichtung- vOrientFront. Beide Vektoren sind senkrecht zueinander.

Parameter für die Wiedergabe von 3D-Sounds festlegen / Name: Set3DParameters // Desc: // VOID CMusicManager::Set3DParameters( FLOAT fDistanceFactor, FLOAT fDopplerFactor, FLOAT fRolloffFactor ) { m_dsListenerParams.flDistanceFactor = fDistanceFactor; m_dsListenerParams.flDopplerFactor = fDopplerFactor; m_dsListenerParams.flRolloffFactor = fRolloffFactor; if( m_pDSListener ) m_pDSListener->SetAllParameters( &m_dsListenerParams, DS3D_IMMEDIATE ); } for (z=0; z<Buffer3DMax; z++) { g_dsBufferParams[z].flMinDistance = fMinDistance; g_dsBufferParams[z].flMaxDistance = fMaxDistance; if( g_pDS3Buffer[z] ) g_pDS3Buffer[z])->SetAllParameters( &g_dsBufferParams[z], DS3D-IMMEDIATE); }

Parameter für die Wiedergabe von 3D-Sounds festlegen - Doppelfaktor- beschreibt die Frequenz einer Schallquelle, wenn sich diese relativ zum Listener bewegt. Bewegen sich Schallquelle und Listener a)zueinander- erhöht sich die Frequenz (Ton wird höher) b)voneinander weg- verringert sich die Frequenz (Ton wird tiefer) - Rolloff-Faktor - beschreibt die Schallintensität gleichbleibende Intensität - 1- simuliert natürliche Verhältnisse - minimale Distanz -Entfernung, ab der sich die Schallintensität nicht mehr erhöht - maximale Distanz - Entfernung, ab der die Schallquelle nicht mehr zu hören ist) - g_dsListenerParams und g_dsBufferParams werden zum Zwischenspeichern der 3D- Soundparameter verwendet.

Soundobjekte erzeugen void CreateSoundObjects (HWND handle) { // CMusicManager-Objekt erzeugen g_pMusicManager = new CMusicManager(); g_pMusicManager ->Initialize (handle); g_pMusicManager ->CreateSegmentFromFile ( &g_pBackgroundMusic, „Bachgroundmusic.wav“ ) g_pMusicManager ->CreateSegmentFromFile ( &g_pExplosion, „Explosion.wav“ ); pPerformance = g_pMusicManager->GetPerformance (); for ( z= 0; z < Buffer3DMax; z++) pPerformance->CreateStandardAudioPath ( DMUS_APATH_DYNAMIC_3D, 1, TRUE, &g_p3DAudioPath[z] ); for ( z= 0; z < Buffer3DMax; z++) g_p3DAudioPath[z] ->GetObjectInPath (0, DMUS_PATH_BUFFER,0, GUID_NULL, 0, IID_IDirectSound3DBuffer, (LPVOID*) _&g_pDS3DBuffer[z] ); for ( z= 0; z < Buffer3DMax; z++) { g_dsBufferParams [z].dwSize = sizeof (DS3DBUFFER); g_pDS3DBuffer[z] -> GetAllParameters (&g_dsBufferParams[z] ); g_dsBufferParams [z].dwSize = DS3DMODE_NORMAL g_pDS3DBuffer[z] -> SetAllParameters ( &g_dsBufferParams[z], DS3D_IMMEDIATE ); for ( z= 0; z < Buffer3DMax; z++) g_p3DAudioPath[z] -> GetObjectInPath (0, DMUS_PATH_PRIMERY_BUFFER, 0, GUID_NULL, 0, IID_IDirectSound3DListener, (LPVOID*), &g_pDsListener); memcpy ( &g_dsListenerParams.vOrientTop, &PlayerVertikaleOriginal, size0f (D3DVECTOR) ); memcpy ( &g_dsListenerParams.vOrientFront, &PlayerFlugrichtungOriginal, size0f (D3DVECTOR) ); g_pDSListener ->SetOrientierung ( g_dsListenerParams. vOrientFront.x, g_dsListenerParams. vOrientFront.y, g_dsListenerParams. vOrientFront.z, g_dsListenerParams. vOrientTop.x,

3D-Soundbuffer vor dem Abspielen ausrichten VOID C3DMusicSegment::SetObjectProperties( D3DVECTOR* pvPosition, D3DVECTOR* pvVelocity ) { D3DMatrixInverse (&tempMatrix, &tempFloat, &g_ObjectKorrekturMatrix); MultiplyVectorWithRotationMatrix ( &Position, pvPosition, &tempMatrix); MultiplyVectorWithRotationMatrix ( &Velocity, pvVelocity, &tempMatrix); memcpy( &m_dsBufferParams.vPosition, pvPosition, sizeof(D3DVECTOR) ); memcpy( &m_dsBufferParams.vVelocity, pvVelocity, sizeof(D3DVECTOR) ); if( g_pDS3DBuffer[x] ) { g_pDS3DBuffer[x]->SetPosition ( g_dsBufferParams[x].vPosition.x, g_dsBufferParams[x].vPosition.y, g_dsBufferParams[x].vPosition.z, DS3D_IMMEDIATE); g_pDS3DBuffer[x]->SetPosition ( g_dsBufferParams[x].vVelocity.x, g_dsBufferParams[x].vVelocity.y, g_dsBufferParams[x].vVelocity.z, DS3D_IMMEDIATE); }

3D-Sound abspielen inline void Play3DSound (CMusicSegment* pSound) { if (pSound) { pSound->play(DMUS_SEGF_SECONDARY, g_p3DAudioPath[x]); x++; } if (x == Buffer3DMax) x=0; }

Die neue Datei GoodSound.h #include "dmutil.h" #include // GLOBALS long x = 0; // Indices für den Zugriff long z = 0; // auf das Audiopath-Array D3DXVECTOR3 Position; D3DXVECTOR3 Velocity; const long Buffer3DMax = 10; // bis zu 10 Explosions-Sounds gleichzeitig CMusicManager* g_pMusicManager = NULL; IDirectMusicAudioPath* g_p3DAudioPath[Buffer3DMax]; IDirectSound3DBuffer* g_pDS3DBuffer[Buffer3DMax]; IDirectSound3DListener* g_pDSListener = NULL; DS3DBUFFER g_dsBufferParams[Buffer3DMax]; DS3DLISTENER g_dsListenerParams; // Soundobjekte: CMusicSegment* g_pBackgroundMusic = NULL; CMusicSegment* g_pExplosion = NULL; // Funktionsprototypen void CreateSoundObjects(HWND handle); void Set3DSoundParameters(float fDopplerFactor, float fRolloffFacto float fMinDistance, float fMaxDistance); void DestroySoundObjects(void); // INLINES inline void PlayMusic( CMusicSegment* pSound ) { if(pSound) pSound->Stop(DMUS_SEGF_DEFAULT ) if(pSound) pSound- >SetRepeats(DMUS_SEG_REPEAT_INFINITE ); if(pSound) pSound->Play( DMUS_SEGF_DEFAULT ); } inline void StopMusic( CMusicSegment* pSound ) { if( pSound ) pSound->Stop(DMUS_SEGF_DEFAULT ); } inline void NewVolume( long Volume ) { // wirkt sich auf alle Musik und Sound-Segmente aus g_pBackgroundMusic->SetVol(Volume ); } inline void Play3DSound(CMusicSegment* pSound) { if(pSound) { pSound->Play(DMUS_SEGF_SECONDARY, g_p3DAudioPath[x]); x++; } if(x == Buffer3DMax) x = 0; }

Die neue Datei GoodSound.h inline void Set3DSoundObjectProperties(D3DXVECTOR3* pvPosition, D3DXVECTOR3* pvVelocity) { D3DXMatrixInverse(&tempMatrix, &tempFloat, &g_ObjectKorrekturMatrix); MultiplyVectorWithRotationMatrix(&Position, pvPosition, &tempMatrix); MultiplyVectorWithRotationMatrix(&Velocity, pvVelocity, &tempMatrix); memcpy(&g_dsBufferParams[x].vPosition, &Position, sizeof(D3DVECTOR) ); memcpy(&g_dsBufferParams[x].vVelocity, &Velocity, sizeof(D3DVECTOR) ); if( g_pDS3DBuffer[x] ) { g_pDS3DBuffer[x]- >SetPosition(g_dsBufferParams[x].vPosition.x, g_dsBufferParams[x].vPosition.y, g_dsBufferParams[x].vPosition.z, DS3D_IMMEDIATE ); g_pDS3DBuffer[x]->SetVelocity(g_dsBufferParams[x].vVelocity.x, g_dsBufferParams[x].vVelocity.y, g_dsBufferParams[x].vVelocity.z, DS3D_IMMEDIATE ); } // Funktionsdefinitionen void CreateSoundObjects(HWND handle) { // CMusicManager-Objekt erzeugen: g_pMusicManager = new CMusicManager(); g_pMusicManager->Initialize(handle); g_pMusicManager- >CreateSegmentFromFile(&g_pBackgroundMusic, "Backgroundmusic.wav"); g_pMusicManager->CreateSegmentFromFile(&g_pExplosion, "Explosion.wav"); } IDirectMusicPerformance8* pPerformance = NULL; pPerformance = g_pMusicManager->GetPerformance(); for(z = 0; z < Buffer3DMax; z++) pPerformance- >CreateStandardAudioPath(DMUS_APATH_DYNAMIC_3D, 1, TRUE, &g_p3DAudioPath[z]) ; for( z = 0; z < Buffer3DMax; z++ ) g_p3DAudioPath[z]->GetObjectInPath (0,DMUS_PATH_BUFFER, 0, GUID_NULL, 0, IID_IDirectSound3DBuffer, (LPVOID*) &g_pDS3DBuffer[z] ) ;

Die neue Datei GoodSound.h for( z = 0; z < Buffer3DMax; z++ ) { g_dsBufferParams[z].dwSize = sizeof(DS3DBUFFER); g_pDS3DBuffer[z]->GetAllParameters( &g_dsBufferParams[z] ); g_dsBufferParams[z].dwMode = DS3DMODE_NORMAL ; g_pDS3DBuffer[z]->SetAllParameters( &g_dsBufferParams[z], DS3D_IMMEDIATE ); } for(z = 0; z < Buffer3DMax; z++) g_p3DAudioPath[z]- >GetObjectInPath(0,DMUS_PATH_PRIMARY_BUFFER, 0, GUID_NULL, 0, IID_IDirectSound3DListener, (LPVOID*) &g_pDSListener) ; memcpy(&g_dsListenerParams.vOrientTop, &PlayerVertikaleOriginal, sizeof(D3DVECTOR) ); memcpy(&g_dsListenerParams.vOrientFront, &PlayerFlugrichtungOriginal, sizeof(D3DVECTOR) ); g_pDSListener->SetOrientation (g_dsListenerParams.vOrientFront.x, g_dsListenerParams.vOrientFront.y, g_dsListenerParams.vOrientFront.z, g_dsListenerParams.vOrientTop.x, g_dsListenerParams.vOrientTop.y, g_dsListenerParams.vOrientTop.z, DS3D_IMMEDIATE ); void DestroySoundObjects(void) { if(g_pMusicManager) g_pMusicManager->StopAll(); SAFE_DELETE(g_pBackgroundMusic) SAFE_DELETE(g_pExplosion) SAFE_RELEASE(g_pDSListener) for(z = 0; z < Buffer3DMax; z++) { SAFE_RELEASE(g_pDS3DBuffer[z]) SAFE_RELEASE(g_p3DAudioPath[z]) } SAFE_DELETE(g_pMusicManager) } void Set3DSoundParameters(float fDopplerFactor, float fRolloffFactor, float fMinDistance, float fMaxDistance ) { g_dsListenerParams.flDopplerFactor = fDopplerFactor; g_dsListenerParams.flRolloffFactor = fRolloffFactor; g_dsListenerParams.vPosition.x = 0; g_dsListenerParams.vPosition.y = 0; g_dsListenerParams.vPosition.z = 0; if( g_pDSListener ) g_pDSListener->SetAllParameters( &g_dsListenerParams, DS3D_IMMEDIATE );

Die neue Datei GoodSound.h for( z = 0; z < Buffer3DMax; z++ ) { g_dsBufferParams[z].flMinDistance = fMinDistance; g_dsBufferParams[z].flMaxDistance = fMaxDistance; if( g_pDS3DBuffer[z] ) g_pDS3DBuffer[z]- >SetAllParameters( &g_dsBufferParams[z], DS3D_IMMEDIATE ); } Zum Testen der 3D-Soundfunktionen werden in der Funktion Show_3D-Scenario () nach dem Zufallsprinzip Positions- und Geschwindigkeits- angaben erzeugt. Nachdem SetObjectProperties() ausgerichtet wurde, wird das Explosionssample abgespielt.