2014-09-13 4 views
1

J'apprends à programmer avec SDL2. Actuellement, je fais un exercice de base. Mon programme charge une image de fond, et une feuille de sprite complète sur le fond. Mais j'ai des problèmes lors de l'exécution du programme. Quand j'exécute le binaire, la fenêtre du programme se ferme immédiatement d'elle-même; Je ne vois rien. Je pense que c'est un problème avec la boucle principale, mais ça me convient. Ceci est mon codeErreur lors de la compilation du test SDL

#include "SDL.h" 


void main() { 

int gameover = 0; 


SDL_Init(SDL_INIT_VIDEO); 

SDL_Window* TheWindow; 
SDL_Renderer* RenderEngine; 
SDL_Surface* LoadedSurface; 
SDL_Surface* LoadedImage; 
SDL_Texture* CharacterImg; 
SDL_Texture* BackgroundImg; 

TheWindow = SDL_CreateWindow("Character Test", 
    SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 580, SDL_WINDOW_RESIZABLE); 

RenderEngine = SDL_CreateRenderer(TheWindow, -1, SDL_RENDERER_ACCELERATED); 

LoadedSurface= SDL_LoadBMP("./maptest.bmp"); 
BackgroundImg = SDL_CreateTextureFromSurface(RenderEngine, LoadedSurface); 
SDL_FreeSurface(LoadedSurface); 

LoadedImage = SDL_LoadBMP("./sprite.bmp"); 
CharacterImg = SDL_CreateTextureFromSurface(RenderEngine, LoadedImage); 
SDL_FreeSurface(LoadedImage); 



SDL_Event event; 

while (!gameover) 
{ 

    if (SDL_PollEvent(&event)) { 

    switch (event.type) { 

     case SDL_QUIT: 
     gameover = 1; 
     break; 

     case SDL_KEYDOWN: 
     switch (event.key.keysym.sym) { 
     case SDLK_ESCAPE: 
     case SDLK_q: 
     gameover = 1; 
       break; 
      } 
     } 
     break; 
     } 

    SDL_RenderClear(RenderEngine); 
    SDL_RenderCopy(RenderEngine, BackgroundImg, NULL, NULL); 
    SDL_RenderCopy(RenderEngine, CharacterImg, 120, 80); 
    SDL_RenderPresent(RenderEngine); 


    } 



    SDL_Quit(); 



} 
+2

Si votre programme fonctionne, il est pas une erreur lors de la compilation. –

+0

Aussi, avez-vous essayé d'ajouter quelques printf pour vous connecter aux points critiques, puis exécutez-le à partir de la ligne de commande? Cela devrait vous donner plus de réponses ... –

Répondre

3

Votre code quitter le while -loop si toutSDL_PollEvent arrive:

while (!gameover) 
    { 
    if (SDL_PollEvent(&event)) //Any SDL_PollEvent that gets into if... 
     { 
     switch (event.type) 
      {  
      case SDL_QUIT: 
      gameover = 1; 
      break; 
      case SDL_KEYDOWN: 
      switch (event.key.keysym.sym) 
       { 
       case SDLK_ESCAPE: 
       case SDLK_q: 
       gameover = 1; 
       break; 
       } 
      } 
     break;  //...will eventually hit this break if it didn't break before 
     } 
    SDL_RenderClear(RenderEngine); 
    SDL_RenderCopy(RenderEngine, BackgroundImg, NULL, NULL); 
    SDL_RenderCopy(RenderEngine, CharacterImg, 120, 80); 
    SDL_RenderPresent(RenderEngine); 
    } 
+0

Oui, la dernière pause fera tomber le programme hors de la boucle while. Cependant, le code pourrait vraiment utiliser des vérifications de sécurité pour vérifier la présence de NULL après la création/le chargement des ressources. – Zammalad

+0

Ces parenthèses égyptiennes vous obtiendront. Notez comment EOF nettoie le tout de manière à ce que le problème soit évident. –

Questions connexes