2017-01-23 4 views
0

Ich habe Probleme beim Versuch, meint dieses .png Bild mit dem folgenden Code zu laden:Warum wird die Oberfläche, die ich erstellt habe, nicht geladen?

#include <iostream> 
#include <SDL.h> 
#include<SDL_image.h> 
#include<string> 


SDL_Texture *LoadTexture(std::string filePath,SDL_Renderer*renderTarget) 
{ 
    SDL_Texture *texture=NULL; 
    SDL_Surface *surface= IMG_Load(filePath.c_str()); 
    if(surface==NULL) 
     std::cout<<"Error1"<<std::endl; 
    else 
    { 
     texture=SDL_CreateTextureFromSurface(renderTarget,surface); 
     if(texture==NULL) 
      std::cout<<"Error2"<<std::endl; 
    } 
    SDL_FreeSurface(surface); 
    return texture; 
} 

int main(int argc, char*argv[]) { 
//Initializing and loading variables 

    SDL_Window *window=NULL; 
    SDL_Renderer *renderTarget=NULL; 
    int currentTime=0; 
    int prevTime=0; 
    float delta=0.0f; 
    const Uint8 *keystate; 
    SDL_Rect camerRect={0,0,222,290}; 

    SDL_Init(SDL_INIT_VIDEO); 

    int data=10; 

    window=SDL_CreateWindow("SDL CodingMadeEeasY Series", SDL_WINDOWPOS_CENTERED, 
      SDL_WINDOWPOS_CENTERED,222,290, SDL_WINDOW_SHOWN); 
    renderTarget= SDL_CreateRenderer(window,-1,SDL_RENDERER_ACCELERATED); 

    SDL_Texture *texture=LoadTexture("spaceship_stock2.png",renderTarget); 


    bool isRunning=true; 
    SDL_Event ev; 

    while(isRunning) 
    { 
     prevTime=currentTime; 
     currentTime=SDL_GetTicks(); 
     delta=(currentTime-prevTime)/1000.0f; 
     while(SDL_PollEvent(&ev) != 0) 
     { 
      //Getting the events 
      if(ev.type==SDL_QUIT) 
       isRunning=false; 
     } 

     keystate=SDL_GetKeyboardState(NULL); 

     SDL_RenderClear(renderTarget); 
     SDL_RenderCopy(renderTarget,texture,&camerRect,NULL); 
     SDL_RenderPresent(renderTarget); 

    } 
     SDL_DestroyWindow(window); 
     SDL_DestroyRenderer(renderTarget); 
     SDL_DestroyTexture(texture); 

     texture=nullptr; 
     window=nullptr; 
     renderTarget=nullptr; 

     IMG_Quit(); 
     SDL_Quit(); 



return 0; 
} 

Fenster Output: Ein schwarzes Fenster der richtigen Größe.

Console Ausgabe: Error1

Fehler: Keine weiteren Fehler in diesem Projekt beziehen, nur Warnungen wegen ungenutzten Variablen.

Der Compiler kann meine PNG-Datei nicht finden, obwohl ich eine Kopie von spaceship_stock2.png im Debug-Ordner und eine Kopie im Freigabeordner gespeichert habe. Debug ist momentan aktiv und ich benutze Eclipse Helios.

Ich habe die Bibliotheksflags eingefügt und den korrekten Pfad für die Bibliothek und die Includes festgelegt.

Dies ist eine geringfügige Änderung des CODING MADE EASY-Codes in a tutorial for scrolling backgrounds.

+0

Wo ist Ihr 'IMG_Init() 'Aufruf und die Verifizierung, dass' IMG_INIT_PNG' unterstützt wird? Warum überprüfen Sie nicht 'IMG_GetError()' für zusätzliche Fehlerinformationen? Überprüfen Sie, ob das aktuelle Arbeitsverzeichnis Ihres Prozesses das ist, was Sie annehmen. – genpfault

+0

Danke, ich habe das Problem gelöst, indem ich eine Kopie der .png-Datei im Projektordner Overall, aber außerhalb des Debug- und Release-Ordners gespeichert habe. Normalerweise kopiere und veralte ich Dateien über den Projektexplorer. Wie überprüfen Sie das Arbeitsverzeichnis? –

+0

https://en.wikipedia.org/wiki/Working_directory – genpfault

Antwort

0

Ich konnte diesen Code kompilieren und das Bild gut erhalten. Die einzigen Dinge, die ich änderte, waren <SDL.h> bis "SDL.h" und <SDL_image.h> bis "SDL_image.h".

Dann zu kompilieren, lief ich

c++ code_file_name.cpp `sdl2-config --cflags --libs` -lSDL2_image 

auf meinem Linux-System.

Verwandte Themen