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

27.10.2009, 20:21

[Gelöst] SDL Befehlsabfrage klappt nicht wie gewünscht

Hallihallo liebe Community!

nach längerer "C++ Abstinenz" wollt ich mich nun wieder ans programmieren machen, und den Anfang sollte dabei die Beherrschung der SDL darstellen. Da ich das in Etappen erledigen wollte, fing ich an ein einfaches Programm zu erstellen, welches ein SDL-fenster generiert (mit türkiser surface), mehr nicht. Natürlich sollte der nutzer es auch schliessen können...... Doch hier liegt das Problem: wenn man das Fenster anklickt, hängt es sich auf und man muss über die Windows-funktion "sofort beenden" dem ganzen ein Ende bereiten. Klickt man jedoch das im Hintergrund laufende Konsolen fenster an und drückt eine Tase schliesst es sich sofort. Ich habe den Verdacht das ich die Befehlsabfrage irgendwie vermurckst hab. So siehts aus:

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
#include "SDL.h"
#include <stdio.h> 
#include <iostream>
using namespace std;





int main (int argc, char *argv[])
{ 
 int ScreenWidth = 800; 
 int ScreenHeight = 600;
 int ColorDepth = 16;
 bool bFullscreen = false;
 SDL_Event Event;   
    
    
    
 SDL_Surface *m_pScreen;   // Surface für den Screen

 Uint8       *m_pKeystate; // Array für aktuellen Tastaturstatus

  

 if (SDL_Init (SDL_INIT_VIDEO | SDL_INIT_TIMER) == -1 )
  {
    cout << "SDL konnte nicht initialisiert werden!" << endl;
    cout << "Fehlermeldung: " << SDL_GetError () << endl;

    SDL_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;

    SDL_Quit ();

    return (false);
  }
  
   // Zeiger auf internes Array für Tastaturstatus ermitteln

  m_pKeystate = SDL_GetKeyState (NULL);

  
  
 SDL_FillRect (m_pScreen, NULL,SDL_MapRGB (m_pScreen->format, 0, 255, 255));

 
  
     

 // Gab es ein Event?

  if (SDL_PollEvent (&Event))
  {
    // Ja, also schauen welches

    switch (Event.type)
    {
      // Beenden?

      case (SDL_QUIT):
      {
        SDL_Quit () ;  
        return (0);
      } break;

      // Wurde eine Taste gedrückt?

      case (SDL_KEYDOWN):
      {
        switch (Event.key.keysym.sym)
        {
          case (SDLK_ESCAPE):
          {
            // Ja, also Spiel beenden

              SDL_Quit ();
              return (0);

          } break;
        }
      } break;
    }
  }
 




 system ("Pause");
 return (0);
 } 


Des weiteren bleibt noch zu sagen das ich das meiste aus der "framework klasse" des 12. kapitels aus Heiko Kalistas Buch übernommen hab. Muss ich vielleicht irgendwie eine Update-funktion mit einbringen? Ich hoffe ihr könnt mir helfen und bedanke mich schon mal im Voraus ganz herzlich für Antworten!

Käsekönig

1x Contest-Sieger

  • Private Nachricht senden

2

27.10.2009, 20:36

Naja, du fragst einmal ab, ob es ein Event gab, und dann ist Schluss. Da musst du schon eine Schleife einbauen!

3

27.10.2009, 20:38

oh mann du hast ja recht!
ich bin so blöd! :? :D :D
Danke dir vielmals!


edit: jetzt klappt es!! Kann man den Thread irgendwie als gelöst markieren?

goldfisch007

Alter Hase

Beiträge: 446

Wohnort: Süden von Berlin

  • Private Nachricht senden

4

28.10.2009, 01:40

jap:

geh bei deinem beitrag auf editieren und dann änderst du den titel
Wir bauen auf und reißen nieder, so ham wir Arbeit ima wieder...
--------------------
http://www.piratenpartei.de/tmp/images/Slogans_5_0.png
--------------------
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender, geklaut von Helmut xD)

Werbeanzeige