bild laden mit SDL, Release funktioniert nicht ohne VS
-
Hi,
für mein Spiel benutze ich C++ und SDL und lade dabei einige bmps mit SDL_LoadBMP. Das funktioniert auch solange ich das Programm mit Visual Studio starte, auch die Releaseversion. Aber wenn ich die exe direkt starte läuft zwar das Programm, aber ich bekomm nur ein schwarzes Fenster.
Die bmps sind im gleichen Ordner wie die Exe und den Zeigern, die auf die SDL_Surface zeigen, welche die bmps speichern sollten, wird auch ein Wert zugewiesen.Muss ich sonst noch was machen, damit das Programm eigenständig läuft? Was könnte schief gehen?
Danke!
Knobbers
-
Hast du in SDL_LoadBMP("bla.bmp") einen fixen Pfad angegeben ?
-
Sheldor schrieb:
Hast du in SDL_LoadBMP("bla.bmp") einen fixen Pfad angegeben ?
nein, sollte ich?
-
Knobbers schrieb:
Sheldor schrieb:
Hast du in SDL_LoadBMP("bla.bmp") einen fixen Pfad angegeben ?
nein, sollte ich?
Nein
Zeig mal deinen Code.
*edit:
Ich denke die Datei wird einfach nicht gefunden.
-
SDL_Surface *framework::bmpLaden(std::string datei, bool mitColorKey){ SDL_Surface *geladen = NULL; SDL_Surface *optimiert = NULL; geladen = SDL_LoadBMP(datei.c_str()); if (geladen != NULL){ std::cout << datei << " geladen (" << geladen << ")\n"; optimiert = SDL_DisplayFormat(geladen); if (colorKey){ SDL_SetColorKey(optimiert, SDL_SRCCOLORKEY, colorKey); } SDL_FreeSurface(geladen); } else{std::cout << datei << "fail :/ \n";} return optimiert; }
Das ist die Funktion, die die Bilder lädt. Und wie gesagt, der Zeiger "geladen" hat einen Wert. Wenn ich die Bilder nicht im selben Ordner hab, kommt meine "fail" Meldung.
Die Funktion start ich so:
texturen = bmpLaden("texturen.bmp", false); objekte = bmpLaden("objekte.bmp", true); zeug = bmpLaden("zeug.bmp", true);
-
Knobbers schrieb:
`
if (colorKey){ SDL_SetColorKey(optimiert, SDL_SRCCOLORKEY, colorKey); }`
SetColorKey: `
int SDL_SetColorKey(SDL_Surface *surface, Uint32 flag, Uint32 key);
`
Was ist das für eine Abfrage ?
Welchem Typ hat die Variable colorKey bei dir ?Beispiel von SDL_SetColorKey
SDL_SetColorKey(image, SDL_SRCCOLORKEY, SDL_MapRGB(image->format, 0, 0, 255));
So wird die Farbe Blau transparent.
Ich weiss nicht ob man auch einen Bool wert übergeben kann, möglicherweise ist deswegen alles schwarz bei dir.
-
colorKey ist eine Unit32-Variable (blau) die ich woanders festgelegt habe. Und die sollte eigentlich nicht bei dem if stehen sondern "mitColorKey". Dürfte aber kein schlimmer Fehler sein. Normalerweise funktionierts ja.
-
Keine Lösung, aber eine Idee zum weiteren debuggen: Schreib dir mal die surfaces vor dem blitten (und den screen nachm blitten) mit SDL_SaveBMP in ein file raus, und schau an wies aussieht.
Alternativ auch mal alpha deaktivieren, und schaun obs was ändert. Denk dran das es sowohl per surface alpha gibt, als auch (eventuell) einen alphachannel, das könnte auch probleme machen.
http://wiki.delphigl.com/index.php/SDL_SetAlpha Nur so als info wie alphablending/colorkeys bei SDL funktionieren.Ich erinner mich dunkel, das ich so ein Problem auch mal hatte, weiß aber leider nicht mehr, was es genau war.
-
ok danke, werds versuchen!