Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

30.12.2014, 18:46

[C++][SFML] Fehler beim Öffnen eines Bildes "Unable to open file"

Hey,
als ich neulich eine Boss-Klasse schrieb und sie kompilierte, kam in meiner Konsole eine Fehlermeldung.

Failed to load image "assets/boss_background.png". Reason : Unable to open file
Failed to load image "assets/isko_boss.png". Reason : Unable to open file
Failed to load image "assets/isko_boss_target.png". Reason : Unable to open file

Ich habe den Pfad zu den Bildern richtig angegeben und an dem Code habe ich eigentlich nichts falsch gemacht.
pTexture->loadFromFile("assets/isko_boss.png"); pTextureTarget->loadFromFile("assets/isko_boss_target.png");

Falls ich die exe im Release Ordner öffne, funktioniert es. Dann wollte ich die die Skalierung der Sprite ändern und die Sprite war wieder weg, als ich der Änderung wegmachte, war die
Sprite immer noch weg.
Suchmaschinen habe ich benutzt, aber es hat nichts geholfen. Ich hoffe ihr könnt mir helfen.
LG

2

30.12.2014, 19:07

Du startest das Programm wohl aus der IDE (VS). VS setzt das Arbeitsverzeichnis des Programms beim dessen Start immer auf das Projektverzeichnis. Unter den Projekteinstellungen kannst du es bei 'Debugging' einstellen.

3

31.12.2014, 11:25

Wenn ich es debugge, dann kommt die Fehlermeldung:


Die Fehlermeldung tritt nur auf, wenn irgendetwas zerstört wird (Schüsse, Gegner, ...). Allerdings trat das schon vorher auf, wo noch alles funktionierte (ich hielt es damals nicht für weiter schlimm).
Ich frage mich nun, was ich bei dem Löschen der Sachen falsch gemacht habe.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
for(auto it = mList.begin(); it != mList.end(); ++it){
        if(!(*it)->getIsAlive()){
            delete (*it);
            (*it) = nullptr;

            it = mList.erase(it);
        }else {
            (*it)->update(frametime);
        }
    }

(die anderen Objekte wurden auch so ähnlich gelöscht)
Die dll liegt im system32 ordner.
LG

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

31.12.2014, 11:47

Du entfernst mit erase den Iterator und bekommst den Nachfolger. Dieser *kann* bereits mList.end() sein. Danach kommt das "++it" und da knallt es, weil das auf end angewendet keine gültige Operation ist.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

5

31.12.2014, 12:15

Übringens kannst du die Klammern um *it weglessen, da eh erst dereferenziert (das was der * operator macht) wird und dann zugewiese und das nullptr setzen ist auch sinnlos, da du den Zeiger eh aus der liste löscht ;)

6

31.12.2014, 12:45

Du entfernst mit erase den Iterator und bekommst den Nachfolger. Dieser *kann* bereits mList.end() sein. Danach kommt das "++it" und da knallt es, weil das auf end angewendet keine gültige Operation ist.

Und wie kann ich das verhindern. Tut mir Leid, aber ich hab echt keine Ahnung ?(

7

31.12.2014, 12:51

Alles hochkomplex:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
for(auto it = mList.begin(); it != mList.end(); )
{
    if(!(*it)->getIsAlive())
    {
        delete (*it);
        it = mList.erase(it);
    }
    else
    {
        (*it)->update(frametime);
        ++it;
    }
}


MfG
Check

8

31.12.2014, 18:12

Nur leider hat die Änderung nichts an meinem eigentlichen Problem genützt.
Es kommt immer noch die Fehlermeldung in der Konsole und Debug-Modus hat auch nichts gesagt. :/
Ab und zu mal stürzt mein Windows Explorer ab, wenn ich in dem Ordner bin.
Ich denke mal dass das einen Zusammenhang hat.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

31.12.2014, 18:21

Unwahrscheinlich. Wahrscheinlicher (100%) ist, dass Deine Pfad-Angaben noch immer falsch sind, sofern Du über "Unable to open file" redest.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

10

01.01.2015, 18:31

Meine Header- und Quelldateien sind im TheAmazingPaintman-Ordner.
»isko« hat folgendes Bild angehängt:
  • Unbenannt-1.png

Werbeanzeige