SDL: Rechteck bewegt sich nicht

Gast #1545689
Lesenswert?

Hallo möchte mit der SDL Bibliothek als erste Übung ein kleines Rechteck 
mit durch die Tastatur bewegen. Leider funktioniert dies überhaupt 
nicht.
Was mache ich vermutlich falsch?
1
int main(int argc, char **argv)
2
{
3

4
  if (SDL_Init ( SDL_INIT_VIDEO ) != 0) 
5
  { //SDL Initialisierung 
6
    printf ("SDL Initialisierung fehlgeschlagen: %s\n", 
7
    SDL_GetError ()); //Bei Fehler, beenden 
8
    return EXIT_FAILURE; 
9
  } 
10
  atexit (SDL_Quit); //Beim beenden des Programms wird SDL_Quit ausgeführt 
11
  screen = SDL_SetVideoMode (640, 480, 16, SDL_SWSURFACE); // Erstelle Screen 
12
  if (screen == NULL) 
13
  {  //Bei Fehler 
14
    printf ("Auflösung nicht gefunden: " //Fehler melden! 
15
    " %s\n", SDL_GetError ()); 
16
    return EXIT_FAILURE; 
17
  } 
18
  //SDL_Delay (2000);  //Warte 2000 Millisec. 
19
  //printf ("Alles OK!\n");  //Beenden mit "Alles OK!" 
20
     
21
  image = IMG_Load("wuerfel.JPG");
22
  if ( image == NULL )
23
  {
24
    printf("Das Bild konnte nicht geladen werden: %s\n", SDL_GetError());
25
    exit(-1);
26
  }
27
  /*
28
  //Apply the surface to the screen
29
    apply_surface( 0, 0, image, screen ); 
30

31
  //Update the screen
32
    if( SDL_Flip( screen ) == -1 )
33
    {
34
        return 1;
35
    } 
36
  */
37
  rect.x = 0;
38
  rect.y = 0;
39
  rect.w = 0;
40
  rect.h = 0;
41
  SDL_BlitSurface(image, NULL, screen, &rect);
42
  SDL_UpdateRect(screen, rect.x, rect.y, rect.w, rect.h);
43

44
  while (!quit)
45
    {
46
      SDL_PollEvent (&e);
47
      bKey = SDL_GetKeyState (NULL);
48
      if (bKey[SDLK_ESCAPE])
49
        quit = 1;
50
      if (bKey[SDLK_LEFT] && rect.x > 0)
51
        rect.x--;
52
      if (bKey[SDLK_RIGHT] && rect.x < 640)
53
        rect.x++;
54
    if (bKey[SDLK_UP] && rect.y > 0)
55
        rect.y++;
56
    if (bKey[SDLK_DOWN] && rect.y < 480)
57
        rect.y++;
58
    printf("rect.x = %d rect.y = %d\n",rect.x,rect.y);
59

60
    SDL_BlitSurface(image, NULL, screen, &rect);
61
    SDL_UpdateRects(image,1,&rect);
62

63
    SDL_FreeSurface(image);
64

65
    SDL_Delay(500);
66
    }
67

68
  return EXIT_SUCCESS;
69
}
Gast #1546440
Lesenswert?

Arne schrieb:
> Warum sind rect.h und rect.w Null? Müsste das nicht Höhe/Breite von
> 'image' sein?

Achja, stimmt, SDL_Blitt trägt ja die Größe in das Rect ein. Da hab ich 
zuerst nicht dran gedacht.

Damit bleibt noch, dass SDL_UpdateRect mit screen aufgerufen werden 
muss.
Gast #1548755
Lesenswert?

und was mir noch gerade auffällt: Warum wird das image mit 
SDL_FreeSurface(image); in der Schleife gelöscht? Beim zweiten Durchlauf 
wird nur noch auf nicht belegten Speicher zugegriffen. Eigentlich müsst 
da jeder Debugger sofort Alarm schreien.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren