Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

24.03.2013, 19:58

Kapitel 12 - Pointer Hilfe !

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. :S
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 !

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Teizakk« (25.03.2013, 20:18)


TigerClaw25

unregistriert

2

04.04.2013, 20:26

Mich wuerde es interessiern, ob es normal iSt, wenn man den Ablauf bzw. vom Code aus Kapitel 12 ersch'agen wird. Sollte man direkt weiter machen und das Spiel erweitern? Muss ehrlich gestejen, auf Anhieb koennte ich das Spiel nicht nachprogrammieren und beim drauf schauen verstehe ich viele Dinge auch nicht ganz. Kommt das mit der Erfahrung oder soll ich das Spiel so lange studieren, bis alles 100% sitzt?

m3xx

Alter Hase

Beiträge: 434

Beruf: Student

  • Private Nachricht senden

3

04.04.2013, 21:28

Du sollst ja nicht das Spiel studieren, sondern nochmal das nachlesen, was du nicht verstehst, bis du es verstehst.

Werbeanzeige