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

12.12.2014, 20:32

SFML Sprite skalieren funktioniert nicht richtig

Ich bin gerade dabei ein Tilemap basiertes Spiel zu erstellen. Die verschiedenen Texturen sind alle 100x100 px groß. Wenn ich die Sprites auch 100x100 px groß mache, muss ja nichts skaliert werden und alles sieht bestens aus:

(Link)

Wenn ich nun aber die Sprites größer mache zBsp auf 133*133px wird nur jedes 2. Sprite richtig skaliert:

(Link)

Die Skalierung sieht folgendermaßen aus;

C-/C++-Quelltext

1
m_Sprite.setScale(m_Size / m_Sprite.getGlobalBounds().width, m_Size / m_Sprite.getGlobalBounds().height);

Hoffe jemand kann mir helfen :D

2

12.12.2014, 21:05

Tja keine Ahnung. Debuggen, meine Zauberkugel ist schon für Weihnachten eingepackt

MfG
Check

3

12.12.2014, 21:09

Wird das ganze auch für jedes Sprite aufgerufen?

4

13.12.2014, 13:00

Ja. Weil beim erstellen wird dem Sprite die Texture + TextureRect zugewiesen und dann wird das Sprite skaliert:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
void Tiles::create(sf::Texture *Texture, sf::IntRect TextureRect, float size, bool walkable) {
    m_Sprite.setTexture(*Texture);
    m_Sprite.setTextureRect(TextureRect);

    m_Size = size;

    m_Sprite.setScale(m_Size / m_Sprite.getGlobalBounds().width, m_Size / m_Sprite.getGlobalBounds().height);

    m_Walkable = walkable;
}


Ich gehe mal davon aus, dass wenn ich das Sprite das richtige Aussehen hat wird auch die Skalierung aufgerufen

5

13.12.2014, 13:11

Ich habe die Lösung. Ich erstelle das Tile einmal und schiebe es in einen Vector. Die aktuelle Skalierung bleibt erhalte und die Größe des Sprites ist richtig (133*133px). Nun errechne ich den Skalierungsfaktor erneut(Gewünschte Größe / aktuelle Größe => 133 / 133) hab den Faktor 1 und es wird "zurück"-skaliert. Dann wird es wieder in den Vektor geschoben und erneut skaliert(diesmall 133/100), hat den richtige Faktor, dadurch die richtige Größe und alles passt. Und die aktuelle Skalierung bleibt wieder erhalten usw. Gelöst habe ich das Problem indem ich vor der Skalierung die Spritegröße immer wieder auf den Standard zurücksetze

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

6

13.12.2014, 13:47

Das klingt ungemein unnötig.
Suchst du nicht eher nach etwas wie setSize() in Pixeln? Die Skalierung sollte von der Größe ja erstmal unabhängig sein.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

7

13.12.2014, 14:46

Ich würde empfehlen die Map über die Kamera zu Skalieren: http://www.sfml-dev.org/tutorials/2.0/graphics-view.php
Alles was über die Map gezeichnet wird kannst du dann entsprechend Skalieren.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

13.12.2014, 15:17

Ich würde empfehlen die Map über die Kamera zu Skalieren: http://www.sfml-dev.org/tutorials/2.0/graphics-view.php
Alles was über die Map gezeichnet wird kannst du dann entsprechend Skalieren.
Dies ist die korrekte Lösung zur Umsetzung von Zoom. Die anderen sind Unfug.
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]

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

9

13.12.2014, 16:28

Wo steht was von Zoom?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

13.12.2014, 17:20

Wenn er das gesamte Spiel größer darstellen will als es ist, nennt man das dann nicht Zoom?
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]

Werbeanzeige