Du bist nicht angemeldet.

Werbeanzeige

1

03.07.2020, 13:42

Problem mit SDL in Kapitel 12

Hallo zusammen,

ich bin der Anleitung im Buch gefolgt. Leider funktioniert es nicht mit der neuen SDL 2.0.12 (Einige Bezeichner werden nicht erkannt).
Für die SDL2.0.3 mit der damals gearbeitet wurde gibt es nur noch den Code. Leider kann ich diesen nicht kompilieren.
Wie komme ich denn jetzt am besten an die SDL2.0.3-Library?

Gruß Dennis

David Scherfgen

Administrator

Beiträge: 10 278

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

03.07.2020, 15:53

Poste mal deinen Code (mit Code-Tag bitte) und die Fehlermeldungen. Da hat sich bestimmt nicht dramatisch viel an SDL geändert seitdem.

3

03.07.2020, 17:11

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_SWSURFACE | 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


Das ist der Originalcode des Buches.

Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
Fehler (aktiv) E0020 Der Bezeichner ""SDL_SetVideoMode"" ist nicht definiert.
Fehler (aktiv) E0020 Der Bezeichner ""SDL_DOUBLEBUF"" ist nicht definiert. SDL_Game
Fehler (aktiv) E0020 Der Bezeichner ""SDL_FULLSCREEN"" ist nicht definiert. SDL_Game
Fehler (aktiv) E0020 Der Bezeichner ""SDL_SetVideoMode"" ist nicht definiert. SDL_Game
Fehler (aktiv) E0020 Der Bezeichner ""SDL_HWSURFACE"" ist nicht definiert. SDL_Game
Fehler (aktiv) E0020 Der Bezeichner ""SDL_DOUBLEBUF"" ist nicht definiert. SDL_Game
Fehler (aktiv) E0020 Der Bezeichner ""SDL_GetKeyState"" ist nicht definiert. SDL_Game
Fehler (aktiv) E0020 Der Bezeichner ""SDL_Flip"" ist nicht definiert. SDL_Game

4

03.07.2020, 17:38

Im Buch wird meinem Wissens nach SDL 1 verwendet. SDL 2 ist moderner und es enthält andere Funktionen. Wenn du das Buch nachprogrammieren willst musst du Version 1 benutzen. Ich würde dir aber dazu raten ein Tutorial von SDL 2 zu nutzen und gleich darauf umzusteigen.
http://wiki.libsdl.org/MigrationGuide zeigt grob was anders ist.

Stimmt nicht mehr. Ich hab ein altes Buch. Im neuesten Buch wird SDL 2 verwendet.
Aber der Beispiel Code, den du gepostet hast, verwendet SDL 1.
Alles merkwürdig.

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »Hannes« (03.07.2020, 17:57)


5

03.07.2020, 21:41

Nochmal von vorne.

Weil SDL 1 veraltet ist (und ich die libs nicht finde), würde ich dir empfehlen SDL 2 zu lernen. Ein Tutorial dafür wäre zum Beispiel Tutorial von Lazy Foo.

Wenn du weitere fragen hast, stelle sie gerne hier.

6

04.07.2020, 02:26

Ach jetzt weiß ich wo das Problem liegt.
Ich hab zwar ein neues Buch, hab aber den Code aus dem Internet und da ist er wohl nicht aktualisiert.

Danke für die Info Hannes.

Werbeanzeige