Seite 1 von 1

SFML c++

Verfasst: 04.11.2016, 08:46
von Jack
Hey,
folgendes Problem, Ich arbeite nun schon eine Weile an einem kleinen Spiel mit Hilfe der SFML in Visual Studio.
Nun habe ich einmal ausprobiert ob auch im Release build alles so funktioniert wie es soll und das tut es auch.
Mein Problem ist jetzt nun aber, das ich im Projekt nur noch Texturen verwenden kann die ich auch schon vor den Release build, im Projekt Ordner hatte.
Wenn ich versuche eine Textur zu wechseln bekomme ich in der Konsole immer die Fehlermeldung "Failed to load image ... Reason: Unable to open file".
Habe natürlich überprüft ob der Pfad und die Schreibweise stimmen.
Jmd eine Ahnung woran das liegen könnte?

Re: SFML c++

Verfasst: 04.11.2016, 10:25
von joggel
Du benutzt nur einen Ordner für deine Texturen?
Oder einen für das Release und einen für Debug?

Re: SFML c++

Verfasst: 04.11.2016, 10:56
von Jack
Habe den gleichen Ordner in beide Verzeichnisse Kopiert.

Re: SFML c++

Verfasst: 04.11.2016, 11:09
von joggel
Sehr seltsam....
also ich kann da nur raten:
- falschen Pfad angegeben?

Aber du bist dir ja sicher, dass das nicht der grund ist....sorry: mehr fällt mir da auch nicht ein

Re: SFML c++

Verfasst: 04.11.2016, 11:56
von Jack
Ja war das erste was ich geprüft habe und das Dateiformat natürlich.

Re: SFML c++

Verfasst: 04.11.2016, 12:08
von xq
Kannst du in deinem Projektordner mal den Befehl "tree" in der Eingabeaufforderung ausführen und hier posten? Zudem die verwendeten Pfade der Bilddateien und das Ausführungsverzeichnis.

Re: SFML c++

Verfasst: 04.11.2016, 13:32
von Jack
Ist das, das richtige?

Pfad:assets\\gfx\\datei.png
Was meinst du mit Ausführungsverzeichniss?

Re: SFML c++

Verfasst: 04.11.2016, 15:04
von Schrompf
Deine Exe landet in unterschiedlichen Verzeichnissen, je nachdem, welche Build-Konfiguration Du benutzt. In den Bild sehe ich die Verzeichnisse "Debug" (stimmt für Debug-Konfig) und "Game" (was völliger Quatsch ist, denn die Release-Konfig schreibt die Exe nach Release/).

Meine Empfehlung lautet daher eher, mal die Ausgabepfade gerade zu ziehen. Falls Visual Studio, rechte Maustaste auf dem Projekt, was die Exe erstellt, "Eigenschaften" auswählen, links in der Kategorie "Allgemein" auswählen und dann in der Eigenschaften-Liste rechts das "Ausgabeverzeichnis" einstellen auf z.B. "$(SolutionDir)Game". Das musst Du für Debug und Release jeweils separat machen, indem Du die Änderung übernimmst und dann in der oberen Zeile die "Konfiguration" und/oder "Plattform" auswählst. Dabei könntest Du auch gleich der Release-Exe einen anderen Namen geben. Ich habe unter "Zielname" z.b. stehen: "$(ProjectName)_$(Configuration)_$(PlatformShortName)", was dann z.B. in sowas wie "TollesSpiel_Release_x64.exe" resultiert.

Re: SFML c++

Verfasst: 05.11.2016, 01:31
von Jack
Danke vielmals, das hat super funktioniert! :)

Re: SFML c++

Verfasst: 05.11.2016, 09:51
von joggel
Schrompf ist halt der Beste ;)

Re: SFML c++

Verfasst: 12.11.2016, 14:06
von Jonathan
Das Problem wurde ja anscheinend schon gelöst, aber:
Jack hat geschrieben: Wenn ich versuche eine Textur zu wechseln bekomme ich in der Konsole immer die Fehlermeldung "Failed to load image ... Reason: Unable to open file".
Habe natürlich überprüft ob der Pfad und die Schreibweise stimmen.
Relative Pfade sind nützlich, aber auch eine beliebte Fehlerquelle. Deshalb habe ich vor ~100 Jahren meine Exceptionklasse um folgende nützliche Funktion erweitert:

Code: Alles auswählen

Filename::Filename(string Filename)
{
	m_Filename=Filename;
	m_AbsFilename=lexical_cast<string>(filesystem::absolute(filesystem::path(Filename)));
}
Ich bekomme also statt
Failed to open 'Textures/House.png'
die Meldung
Failed to open 'Textures/House.png'; loaded at 'C:\Projects\Game\Debug\WeirdSubDir\Textures\House.png'
Und seitdem hab ich so Probleme nicht mehr. In gute Fehlermeldungen investierte Zeit, ist gut investierte Zeit!

Re: SFML c++

Verfasst: 12.11.2016, 14:34
von xq
Das is ne gute Idee!