Hallo,
ich bin gerade dabei das Asteroidenspiel aus dem Buch zu erweitern. Da ist mir ein Fehler im Spiel aufgefallen. Der erste Asteroid der spawnt hat eine Breite von 640x128px (gesamte Bildbreite), jedoch sollte jeder Asteroid nur eine Breite von 64x64px haben. Alle darauf folgenden Asteroiden haben das auch.
Der Sprite für den Asteroiden wird folgendermaßen geladen:
|
C-/C++-Quelltext
|
1
2
3
4
|
// Sprite für Asteroiden laden
m_pSpriteAsteroid = new CSprite;
m_pSpriteAsteroid->Load ("Data/Asteroid.png", 20, 64, 64);
m_pSpriteAsteroid->SetColorKey (255, 0, 255);
|
Die Load-Methode sieht folgendermaßen 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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
// Load
//
// Aufgabe: Einfaches, nicht animiertes Sprite laden
//
void CSprite::Load (const string sFilename)
{
// Bitmap laden
m_pImage = IMG_Load(sFilename.c_str() );
// Prüfen, ob alles glatt ging
if (!m_pImage)
{
cout << "Fehler beim Laden von: " << sFilename.c_str ();
cout << endl;
cout << "Fehlermeldung: " << SDL_GetError () << endl;
// Framework herunterfahren
g_pFramework->Quit ();
// Gesamtes Spiel beenden
exit (3);
}
// Rect initialisieren
m_Rect.x = 0;
m_Rect.y = 0;
m_Rect.w = m_pImage->w;
m_Rect.h = m_pImage->h;
} // Load
// Load
//
// Aufgabe: Animiertes Sprite laden
//
void CSprite::Load (const string sFilename, int NumFrames,
int FrameWidth, int FrameHeight)
{
// Bitmap laden
Load (sFilename);
// 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
|
Ich konnte das Problem leider nicht beheben..ich kann mir auch nicht erklären, warum der Fehler nur beim ersten Asteroiden auftritt.