Jo Leute, habe das Buch von Heiko Kalista fast durch, habe n kleines Verständnisproblem beim Listing 12.21:
|
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
|
// Zeiger auf Sprite kopieren und Koordinaten setzen
m_pSpriteShot = pSpriteShot;
m_fXPos = fXPos;
m_fYPos = fYPos;
// Rect initialisieren
m_Rect.x = static_cast<int>(m_fXPos);
m_Rect.y = static_cast<int>(m_fYPos);
m_Rect.w = pSpriteShot->GetRect().w;
m_Rect.h = pSpriteShot->GetRect().h;
// Schuss aktivieren
m_bIsAlive = true;
} // Init
// Update
//
// Aufgabe: Schuss bewegen und Position prüfen
//
void CShot::Update ()
{
// Schuss bewegen
m_fYPos -= 400.0f * g_pTimer->GetElapsed ();
m_Rect.y = static_cast<int>(m_fYPos);
// Deaktivieren, falls außerhalb des Bildschirms
if (m_fYPos < -15.0f)
m_bIsAlive = false;
} // Update
|
An sich ist die Funktion ja easy aber ich frage mich folgendes:
Es wird ein Rect namens m_Rect deklariert und benutzt. Wieso wird dies gemacht? Wir haben doch bereits ein Rect aus der Klasse CSprite (hier mal die hpp):
|
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
|
#ifndef SPRITE_HPP
#define SPRITE_HPP
#include "Framework.hpp"
class CSprite
{
public:
CSprite();
~CSprite();
void Load (const string sFilename);
void Load (const string sFilename, int NumFrames,
int FrameWidth, int FrameHeight);
void SetColorKey (int R, int G, int B);
void SetPos (float fXPos, float fYPos);
void Render ();
void Render (float framenumber);
SDL_Rect GetRect () {return m_Rect;}
private:
SDL_Surface *m_pScreen; // Zeiger auf den Screen des Frameworks
SDL_Surface *m_pImage; // Das eigentliche Bild des Sprites
SDL_Rect m_Rect; // Rect des Sprites
SDL_Rect m_FrameRect; // Ausschnitt für Animationsphase
int m_NumFrames; // Breite einer Animationsphase
int m_FrameWidth; // Höhe einer Animationsphase
int m_FrameHeight; // Höhe einer Animationsphase
int m_NumFramesX; // Wie viele Anim-Phasen in X_Richtung ?
};
#endif
|
Man kann sogar wunderbar mit ner Get-Funktion drauf zugreifen.
Andere Frage: Ab wann schafft man denn einen Zusammenhang zwischen dem Bild, dass sich bewegen soll und dem Rect? Bei der Update Funktion (in CShot) wird ja die YPos in Rect gespeichert. Wunderbar, aber ich seh nirgends im Code, dass das Rect dem Bild zugeordnet wird ? Hab ich irgendwas überlesen?
Danke schon mal im Voraus, Jungs