ok hab jetzt die lösung gefunden (
das sind die kleinen aber feinen Erfolgserlebnisse)
Der Fehler lag hier:
|
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
|
// Load
//
// Aufgabe: Animiertes Sprite laden
//
void CSprite::Load (const string sFilename, int NumFrames,
int FrameWidth, int FrameHeight)
{
// Bitmap laden
Load (sFilename); //Genau hier!!!!!!!!
// Rect für Animationsphase initialisieren
m_NumFrames = NumFrames;
m_FrameWidth = FrameWidth;
m_FrameHeight = FrameHeight;
m_FrameRect.w = FrameWidth;
m_FrameRect.h = FrameHeight;
m_NumFramesX = m_pImage->w / m_FrameWidth;
} // Load
// Load
//
// Aufgabe: Einfaches, nicht animiertes Sprite laden
//
void CSprite::Load (const string sFilename)
{
// Bitmap laden
m_pImage = SDL_LoadBMP (sFilename.c_str () );
// Prüfen, ob alles glatt ging
if (m_pImage == NULL)
{
cout << "Fehler beim Laden von: " << sFilename.c_str ();
cout << endl;
cout << "Fehlermeldung: " << SDL_GetError () << endl;
// Framework herunterfahren
g_pFramework->Quit ();
// Gesamtes Spiel beenden
exit (1);
}
// Rect initialisieren
m_Rect.x = 0;
m_Rect.y = 0;
m_Rect.w = m_pImage->w;//Hier werden die gesamtgrößen der bmp eingefügt
m_Rect.h = m_pImage->h;
} // Load
|
Man hängt einfach
|
C-/C++-Quelltext
|
1
2
|
m_Rect.w =FrameWidth;
m_Rect.h = FrameHeight;
|
an das ende der Funktion für animierte Sprites.
Jetzt ist die Frage warum es nach dem ersten Asteroid nicht funktioniert wenn es sonst läuft?????[/cpp]
Ok,auch das hätte ich jetzt gelöst.Falls es wen interessiert: die Antwort liegt wieder in der Sprite-Klasse,genauer in der Funktion Render
|
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
|
// Render
//
// Aufgabe: Ausschnitt des Sprites rendern (Animationsphase)
//
void CSprite::Render (float fFrameNumber)
{
// Spalte berechnen
int Column = static_cast<int>(fFrameNumber)%m_NumFramesX;
// Ausschnitt der aktuellen Animationsphase berechnen
//
// Zeile berechnen
int Row = static_cast<int>(fFrameNumber)/m_NumFramesX;
// Rect berechnen
m_FrameRect.x = Column * m_FrameWidth;
m_FrameRect.y = Row * m_FrameHeight;
// Ausschnitt rendern
SDL_BlitSurface (m_pImage, &m_FrameRect, m_pScreen, &m_Rect);
} // Render
|
Die blit-funktion hat die Eigenschaft den erfolgreich kopierten Abschnitt nachträglich im vierten Parameter also m_Rect zu speichern.Von diesem wurden beim Aufruf nur die Koordinaten benötigt weswegen es zu keinem Fehler kommt.Also wurden die FramRect-Daten welche ja richtig waren ins m_Rect kopiert.Die Kollisionsabfrage hat nun die Werte gespeichert bevor der Asteroid gerendert und damit sein Rect aktualisiert wurde.
Hoffe ihr könnt verstehen was ich meine is ja auch net so wichtig solange es läuft