ALso bei mir sieht die Klasse wie folgt aus:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
class CSound
{
public:
CSound(int audiorate, Uint16 audioformat,
int audiochannels, int audiochunksize);
~CSound();
// Funktionen für einzelne Sounds
void LoadSound(const std::string sFilename, int Volume);
void PlaySound();
// Funktionen für Hintergrundmusik
void LoadMusic(const std::string sFilename, int Volume);
void PlayMusic();
private:
int m_audiorate; // Abtastfrequenz (je höher, desto besserer Sound und mehr Rechenleistung
Uint16 m_audioformat; // Audio-Format
int m_audiochannels; // Kanäle: 1 = mono, 2 = stereo
int m_audiochunksize; //Audio_Puffer
Mix_Chunk *m_psound; //Instanz für den Sound
Mix_Music *m_pmusic; //Instanz für die Hintergrundmusik
};
#endif
|
Dann habe ich natürlich in meiner Game-Klasse eine Zeiger "CSound *m_pMusic". Diesen nutze ich dann an der Stelle, wo mdie Asteroiden zerstört werden.
Wahrscheinlich funktioniert das mit dem Zeiger aber auch nur, weil meine Funktionen von CSound öffentlich gehalten sind und auch die Parameterliste in der Funktion öffentlich ist. Würde ich über die Funktionen von CSound aber auf private Membervariablen vVeränderungen vornehmen, dann würde das nur mit einer friend Methode gehen, richtig?
Also solange Funktionen öffentlich sind oder über diese nicht auf private Membervariablen zugegriffen wird, brauche ich kein "friend"?
Was meintest du genau mit dem Ansatz? Welche Möglichkeiten habe ich in meinem Fall denn noch?
Meine Game sieht wie folgt aus:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
void CGame::Init ()
{
// Neuen Spieler initialisieren
m_pPlayer = new CPlayer;
m_pPlayer->Init ();
m_pPlayer->Reset ();
// Hintergrundbild (Sprite) laden
m_pSpriteBackground = new CSprite;
m_pSpriteBackground->Load ("Data/Background.bmp");
// Sprite für Asteroiden laden
m_pSpriteAsteroid = new CSprite;
m_pSpriteAsteroid->Load ("Data/Asteroid.bmp", 20, 64, 64);
m_pSpriteAsteroid->SetColorKey (255, 0, 255);
// Sound laden
m_pMusic = NULL;
m_pMusic = new CSound (44100, AUDIO_S16SYS, 2, 4096);
m_pMusic->LoadMusic("Data/test.wav",100);
m_pMusic->PlayMusic();
// Sound für Asteroiden-Explosion laden
m_pSoundAsteroid = NULL;
m_pSoundAsteroid = new CSound (44100, AUDIO_S16SYS, 2, 4096);
m_pSoundAsteroid->LoadSound("Data/Asteroid_Explosion.wav", 100);
// Timer für Asteroiden zurücksetzen
m_fAsteroidTimer = 0.0f;
// Spiel läuft
m_bGameRun = true;
} // Init
|
und an der Stelle, wo CheckCollison stattfindet, rufe ich die PlayFunktion auf ...