Meine spontane Vermutung beim Überfliegen ist, dass Du irgendwo eine Textur erstellst und einem Sprite gibst, dann das Besitzerobjekt kopierst, das Original zerstörst (womit die Textur weg ist) und in irgendeiner Kopie auf die Textur zugreifst, deren Referenz aber in's Nirvana zeigt. Damit machst Du den Stack kaputt und damit auch ganz wichtige interne Speicherstellen und Referenzen. Irgendwann knallt es dann natürlich, wenn darauf zugegriffen wird.
Ich wette, dass das Problem nicht auftreten würde, wenn Du verstanden hättest, was Referenzen sind und wie man sie benutzt. Ganz speziell der Punkt, dass man niemals Referenzen auf lokale Objekte setzt und fröhlich herumreicht und kopiert. Du übernimmst Dich meiner Meinung nach momentan absolut, weil Dir noch wesentliche Grundlagen fehlen. Ganz speziell Referenzen und Pointer.
In der Zwischenzeit kannst Du, damit zumindest die Textur-Kopiererei ein Ende hat (die andere üble Fehler erzeugt), alle sf::Texture-Verwendungen durch diese Klasse ersetzen:
|
C-/C++-Quelltext
|
1
2
3
|
class SafeTexture : public sf::Texture, public sf::NonCopyable
{
};
|
Damit bekommst Du überall vom Compiler wilde Fehler um die Ohren gehauen, wenn Du sf::Texture falsch übergibst. Damit wirst Du also zu Pointern und Referenzen gezwungen, was sich für Dich natürlich erstmal schlimm anhört, weil Dir dazu das Verständnis fehlt. Aber es zwingt Dich auch Dich mit diesem sehr wichtigen Thema zu beschäftigen. Denn nur weil Du keine verwendest, heißt das nicht, dass SFML das auch tut. Im Gegenteil sogar, SFML verwendet für Texturen in Sprites eben Referenzen und Pointer.