Liebe Community,
ich habe mich schon immer mit den Pointern schwer getan und nun, in Kapitel 12 aus dem Buch "C++ für Spieleprogrammierer" werden sehr viele Pointer benutzt. Nun frage ich mich. Woher weiß man, wann man einen Pointer benutzen muss und wann nicht?
Beispiel: Sprite.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
|
#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 fFrameNumber);
SDL_Rect GetRect () {return m_Rect;}
private:
SDL_Surface *m_pScreen;
SDL_Surface *m_pImage;
SDL_Rect m_Rect;
SDL_Rect m_FrameRect;
int m_NumFrames;
int m_FrameWidth;
int m_FrameHeight;
int m_NumFramesX;
};
#endif
|
Die dazugehörige .cpp Datei:
|
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
#include "Sprite.hpp"
CSprite::CSprite ()
{
m_pScreen = g_pFramework->GetScreen ();
}
CSprite::~CSprite()
{
SDL_FreeSurface (m_pImage);
}
void CSprite::Load (const string sFilename)
{
m_pImage = SDL_LoadBMP (sFilename.c_str () );
if(m_pImage == NULL)
{
cout << "Fehler beim Laden von: " << sFilename.c_str ();
cout << endl;
cout << "Fehlermeldung: " << SDL_GetError () << endl;
g_pFramework->Quit ();
exit (1);
}
m_Rect.x = 0;
m_Rect.y = 0;
m_Rect.w = m_pImage->w;
m_Rect.h = m_pImage->h;
}
void CSprite::Load (const string sFilename, int NumFrames,
int FrameWidth, int FrameHeight)
{
Load (sFilename);
m_NumFrames = NumFrames;
m_FrameWidth = FrameWidth;
m_FrameHeight = FrameHeight;
m_FrameRect.w = FrameWidth;
m_FrameRect.h = FrameHeight;
m_NumFramesX = m_pImage->w / m_FrameWidth;
}
void CSprite::SetColorKey (int R, int G, int B)
{
SDL_SetColorKey (m_pImage, SDL_SRCCOLORKEY,
SDL_MapRGB (m_pImage->format, R, G, B) );
}
void CSprite::SetPos (float fXPos, float fYPos)
{
m_Rect.x = static_cast<int>(fXPos);
m_Rect.y = static_cast<int>(fYPos);
}
void CSprite::Render ()
{
SDL_BlitSurface (m_pImage, NULL, m_pScreen, &m_Rect);
}
void CSprite::Render (float fFrameNumber)
{
int Column = static_cast<int>(fFrameNumber)%m_NumFramesX;
int Row = static_cast<int>(fFrameNumber)/m_NumFramesX;
m_FrameRect.x = Column * m_FrameWidth;
m_FrameRect.y = Row * m_FrameHeight;
SDL_BlitSurface (m_pImage, &m_FrameRect, m_pScreen, &m_Rect);
}
|
Nochmals. Was sagt mir, dass ich einen Pointer benutzen muss? Wenn ich das Kapitel über Pointer lese dann wird gesagt, dass man Pointer dazu benötigt, um Änderungen außerhalb der ( zum Beispiel ) main-Funktion zu machen, ohne es mit return zurück zu geben.
Hoffentlich könnt ihr mir das recht gut erklären denn mit den ganzen Tutorials komme ich in diesem Punkt nicht so ganz klar.
Danke schonmal für die Antworten.
Mit freundlichen Grüßen
Teizakk
EDIT: Frage hat sich erledigt !