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

22.01.2012, 18:26

SDL_Game [Kapitel12] - Framework überflüssig?

Ich versuche zum Abschluss des Buches, das Beispiel von Kapitel 12 von der SDL auf die SFML anzupassen.

Jedoch drängt sich mir schon beim Framework eine Frage auf:
Ist das gesamte Ding (Framework.cpp und Framework.hpp) nich vollkommen überflüssig?

Bei der SFML muss ich mich über das Doublebuffering, meines überschaubaren Wissens nach, nicht selber kümmern.
Das setzen der Auflösung und Farbtiefe kommt mir zu umstädlich und dadurch auch recht unübersichtlich vor, könnte ich das nicht einfach in die main packen und ab gehts?
Oder begehe ich damit eine der Todsünden des Programmierens und morgen steht eine wütende Horde Programmierer vor meiner Haustür?


Hier mal der Quellcode zum besseren Verständnis:

Framework.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
#ifndef FRAMEWORK_HPP
#define FRAMEWORK_HPP

#include <iostream>
#include "Singleton.hpp"
#include "Timer.hpp"

using namespace std;

#define g_pFramework CFramework::Get()

class CFramework : public TSingleton<CFramework>
{
    public:
        bool  Init    (int ScreenWidth, int ScreenHeight,

            int ColorDepth, bool bFullscreen);
        void  Quit    ();
        void  Update  ();
        void  Clear   ();
        void  Flip    ();
        bool  KeyDown (int Key_ID);
        SDL_Surface *GetScreen () {return m_pScreen;}

    private:
        SDL_Surface *m_pScreen;   // Surface für den Screen
        Uint8       *m_pKeystate; // Array für aktuellen Tastaturstatus

};

#endif



Framework.cpp

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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include "Framework.hpp"

// Init
//
// Aufgabe: Framework initialisieren
//
bool CFramework::Init (int ScreenWidth, int ScreenHeight,
                       int ColorDepth, bool bFullscreen)
{
    // Alle Systeme der SDL initialisieren
    if (SDL_Init (SDL_INIT_VIDEO | SDL_INIT_TIMER) == -1 )
    {
        cout << "SDL konnte nicht initialisiert werden!" << endl;
        cout << "Fehlermeldung: " << SDL_GetError () << endl;

        Quit ();

        return (false);
    }

    // Vollbild oder Fenstermodus einstellen
    if (bFullscreen == true)
    {
        m_pScreen = SDL_SetVideoMode (ScreenWidth, ScreenHeight, ColorDepth,
            SDL_HWSURFACE | SDL_DOUBLEBUF |
            SDL_FULLSCREEN);
    }
    else
    {
        m_pScreen = SDL_SetVideoMode (ScreenWidth, ScreenHeight, ColorDepth,
            SDL_HWSURFACE | SDL_DOUBLEBUF);
    }

    // Prüfen, ob alles funktioniert hat
    if (m_pScreen == NULL)
    {
        cout << "Videomodus konnte nicht gesetzt werden!" << endl;
        cout << "Fehlermeldung: " << SDL_GetError () << endl;

        Quit ();

        return (false);
    }

    // Zeiger auf internes Array für Tastaturstatus ermitteln
    m_pKeystate = SDL_GetKeyState (NULL);

    // Alles ging glatt, also true zurückliefern
    return (true);

} // Init

// Quit
//
// Aufgabe: Framework (SDL) beenden
//
void CFramework::Quit ()
{
    // SDL beenden
    SDL_Quit ();

} // Quit

// Update
//
// Aufgabe: Timer und Keyboardstatus updaten
//
void CFramework::Update ()
{
    // Timer updaten
    g_pTimer->Update ();

    // Tastaturstatus ermitteln
    SDL_PumpEvents ();

} // Update

// Keydown
//
// Aufgabe: Tastendruck abfragen
//
bool CFramework::KeyDown (int Key_ID)
{
    // Prüfen, ob Taste gedrückt ist
    return (m_pKeystate[Key_ID] ? true : false);

} // KeyDown

// Clear
//
// Aufgabe: Buffer löschen
//
void CFramework::Clear ()
{
    // Buffer (Surface) mit Hintergrundfarbe füllen
    SDL_FillRect (m_pScreen, NULL,
        SDL_MapRGB (m_pScreen->format, 0, 0, 0));

} // Clear

// Flip
//
// Aufgabe: Surface umschalten (flippen)
//
void CFramework::Flip ()
{
    // Surface umschalten
    SDL_Flip (m_pScreen);

} // Flip

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

22.01.2012, 19:26

Ja es ist überflüssig. Versuch nicht es zu übertragen sondern schreib einfach alles neu. Versuch erst nen Sprite mit der SFML zu bewegen und so. Dann kannst du es Schritt für Schritt weiter entwickeln bis du ein fertiges Spiel hast.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

3

24.01.2012, 06:07

Danke, damit hat sich die Frage im grunde auch schon erledigt.
Und danke für den Ratschlag. :D

mfg Dastan

Werbeanzeige