ja das mit der übersichtlichkeit seh ich ein
werde ich noch ändern.
Mir gehts ja darum, das ich verschiedene Waffentypen hab, die mit der template funktion GetShotList(); die jeweiligen listen mit unterschiedlichen Schüssen herausgibt.
Die Funktion wird von der Game klasse aus aufgerufen, um kollisionen zu überprüfen zwischen Schüssen und Asteroiden.
Die Game Klasse:
Ausschnitt: Collision()
|
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
void CGame::CheckCollisions ()
{
// Schussliste des Spielers holen
list<DPoulder> *ShotList = m_pPlayer->GetShotList ();
// Iteratoren für Asteroiden- und Schussliste
list<CAsteroid>::iterator ItAsteroid = m_AsteroidList.begin ();
list<DPoulder>::iterator ItShot;
// Rects für Asteroiden und Schüsse
SDL_Rect RectAsteroid;
SDL_Rect RectShot;
// Alle Asteroiden durchlaufen
while (ItAsteroid != m_AsteroidList.end () )
{
// Rect des Asteroiden holen
RectAsteroid = ItAsteroid->GetRect ();
// Alle Schüsse durchlaufen
for (ItShot = ShotList->begin ();
ItShot != ShotList->end ();
++ItShot)
{
// Rect des Schusses holen
RectShot = ItShot->GetRect ();
// Überschneiden sich die Rects?
if (RectShot.y < RectAsteroid.y + RectAsteroid.h &&
RectShot.y + RectShot.h > RectAsteroid.y &&
RectShot.x < RectAsteroid.x + RectAsteroid.w &&
RectShot.x + RectShot.w > RectAsteroid.x)
{
// Ja, also gab es eine Kollision. Somit Schuss und
// Asteroid deaktivieren
ItAsteroid->SetAlive (false);
ItShot->SetIsFly();
ItShot->GetKoordinates(RectAsteroid.x, RectAsteroid.y);
}
}
// Asteroid löschen, falls deaktiviert
if (ItAsteroid->IsAlive () )
ItAsteroid++;
else
ItAsteroid = m_AsteroidList.erase (ItAsteroid);
}
} // CheckCollision
|
ich habe hier einen festen Datentyp gewählt, weil ich diesen auch momentan als test in der Templatefunktion zuweise.
Da ich die Weapon klasse nicht in der Game Klasse included habe, wird über den Player(Spieler Klasse) die liste abgefragt
Ausschnitt Spieler->GetShotList();
|
C-/C++-Quelltext
|
1
2
|
list<DPoulder> *GetShotList () {return m_wWeapon->GetShotList();}
Weapon *m_wWeapon;
|
m_wWeapon ist eine Instanz, die alle Waffen(Schüsse mit listen) besitzt.
Die Fehlermeldung
|
Quellcode
|
1
2
|
C:\Dokumente und Einstellungen\Leridan\Desktop\Trigilox\Trigolox\/Player.hpp: In member function 'std::list<DPoulder, std::allocator<DPoulder> >* CPlayer::GetShotList()':
C:\Dokumente und Einstellungen\Leridan\Desktop\Trigilox\Trigolox\/Player.hpp:19: error: no matching function for call to 'Weapon::GetShotList()'
|