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

11

01.11.2015, 17:50

Ok ich habe das Problem über eine einfache getSprite() Funktion in der Entity Klasse gelöst bekommen. Wusste nicht das es so einfach geht.

Den Hinweis mit den Zeigern werde ich in Zukunft berücksichtigen.

Vielen Dank für eure Hilfe!

12

01.11.2015, 17:58

Ich habe so kein Fehler gesehen, aber wenn es so geht OK.

Ich würde Referenzen empfehlen. Und eventuell Klassenmember und Funktionsparameter nicht den gleichen Namen geben, das kann beim Code lesen verwirren was jetzt gemeint ist.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

13

01.11.2015, 19:17

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.
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]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (01.11.2015, 19:22)


14

02.11.2015, 03:47

Frage nebenbei:
Warum sf::NonCopyable nicht private vererben?

15

02.11.2015, 05:44

Warum sf::NonCopyable nicht private vererben?

Weil alles entscheidende um es nicht kopieren zu können eh schon private ist.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

16

02.11.2015, 06:11

Mag sein, aber ein SafeTexture ist semantisch gesehen kein Noncopyable, sondern hat lediglich die Eigenschaften desselbigen. Hier würde sich sowas doch anbieten. Boost schlägt das für ihr noncoypable doch auch vor, oder liege ich da falsch?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

17

02.11.2015, 06:32

Private wäre durchaus legitim. Allerdings gehe ich mit dem ersten Satz nicht mit. Denn sie wäre damit semantisch gesehen natürlich sehr wohl ein Non-Copyable Object ;)

PS:
Bitte unbedingt lesen und die eigenen Probleme entsprechend korrigieren: SFML Einsteiger-Tipps
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]

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »BlueCobold« (02.11.2015, 10:29)


Werbeanzeige