SFML c++

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Jack
Beiträge: 15
Registriert: 29.02.2016, 12:20

SFML c++

Beitrag 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?
joggel

Re: SFML c++

Beitrag von joggel »

Du benutzt nur einen Ordner für deine Texturen?
Oder einen für das Release und einen für Debug?
Jack
Beiträge: 15
Registriert: 29.02.2016, 12:20

Re: SFML c++

Beitrag von Jack »

Habe den gleichen Ordner in beide Verzeichnisse Kopiert.
joggel

Re: SFML c++

Beitrag 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
Jack
Beiträge: 15
Registriert: 29.02.2016, 12:20

Re: SFML c++

Beitrag von Jack »

Ja war das erste was ich geprüft habe und das Dateiformat natürlich.
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: SFML c++

Beitrag 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.
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Jack
Beiträge: 15
Registriert: 29.02.2016, 12:20

Re: SFML c++

Beitrag von Jack »

Ist das, das richtige?

Pfad:assets\\gfx\\datei.png
Was meinst du mit Ausführungsverzeichniss?
Dateianhänge
Screenshot (9).png
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: SFML c++

Beitrag 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.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Jack
Beiträge: 15
Registriert: 29.02.2016, 12:20

Re: SFML c++

Beitrag von Jack »

Danke vielmals, das hat super funktioniert! :)
joggel

Re: SFML c++

Beitrag von joggel »

Schrompf ist halt der Beste ;)
Benutzeravatar
Jonathan
Establishment
Beiträge: 2353
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: SFML c++

Beitrag 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!
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: SFML c++

Beitrag von xq »

Das is ne gute Idee!
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Antworten