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

08.05.2015, 19:33


Geht:

C-/C++-Quelltext

1
2
mTexture = textures.get(Textures::Airplane);
mPlayer.setTexture(mTexture);


Ich denke mal hier wird die nicht const-get Variante benutzt.




Geht nicht:

C-/C++-Quelltext

1
mPlayer.setTexture(textures.get(Textures::Airplane));


Und hier sollte die const-get Varinate zu einsatz kommen.


Das dürfte der Unterschied sein, aber warum es bei der const Variante nicht geht habe ich auch noch nicht durchschaut.

Eventuell mal eine Pointer zurückgeben und erst in der setTexture-Funktion dereferenzieren.

Gruß Koschi
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

12

08.05.2015, 19:54

C-/C++-Quelltext

1
2
mTexture = textures.get(Textures::Airplane);
mPlayer.setTexture(mTexture);

Hier wird eine Kopie erstellt. Sicher dass dein Manager lange genug "lebt"?

PS: Resource schreibt man im Englischen nur mit einem s.
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

Wirago

Alter Hase

  • »Wirago« ist der Autor dieses Themas

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

13

08.05.2015, 20:07

@Koschi
Habe ich probiert, hat sich nichts verändert.

@Steef
Stimmt, resource schreibt man mit einem s... bin ich zu spät drauf gekommen und mag es jetzt nicht mehr ändern :-/

Eigentlich sollte der Holder noch exisitieren.

14

08.05.2015, 20:17


Eigentlich sollte der Holder noch exisitieren.

Wahrscheinlich nicht!

C-/C++-Quelltext

1
2
3
RessourceHolder<sf::Texture, Textures::ID> textures;
textures.load(Textures::Airplane, "Media/Textures/Eagle.png");
mPlayer.setTexture(textures.get(Textures::Airplane)); // so funktionert es nicht!


Wenn ich das Richtig verstanden habe sind die Zeilen im Konstruktor. Somit existiert dein ResourceHolder auch nur im Konstruktor. Und existiert nach Verlassen nicht merh, damit auch deine Texture nicht mehr.

Gruß Koschi
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

15

08.05.2015, 20:28

[...] bin ich zu spät drauf gekommen und mag es jetzt nicht mehr ändern :-/

Wieso? Geht doch schnell, kleine Regexsuche und gut.

Koschi +1

MfG
Check

Wirago

Alter Hase

  • »Wirago« ist der Autor dieses Themas

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

16

08.05.2015, 20:34

Verdammt, hast absolut recht.
durch die mTexture-Kopie fällt das natürlich nicht auf.
Aber es steht auch so in der Class Reference für sf::Sprite::setTexture -> "The texture argument refers to a texture that must exist as long as the sprite uses it."

Danke für die Hilfe! :thumbup:

17

08.05.2015, 20:38


Danke für die Hilfe! :thumbup:

Gerne.

Die mTexture kannst dir eigentlich sparen, der Sinn des Holders ist es ja mehrere Texturen zu halten, mTextureHolder wäre da wohl die bessere Wahl.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Wirago

Alter Hase

  • »Wirago« ist der Autor dieses Themas

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

18

08.05.2015, 20:45

Ja, so werde ich es auch machen. :)

Werbeanzeige