Frage

Wie kann ich skalieren Sprites in SDL?

War es hilfreich?

Lösung

SDL bietet keine Funktionalität Skalierung direkt, aber es gibt eine zusätzliche Bibliothek mit dem Namen SDL_gfx die Rotation und Zoomen Fähigkeiten zur Verfügung stellt. Es gibt auch Sprig genannt, die ähnliche Funktionen.

Andere Tipps

Sie können Skalierung tun, wenn Sie Sprites aus einer Textur mit SDL_RenderCopy bekommen (), aber ich kann Ihnen nicht garantieren, das Anti-Aliasing.

Mit der Funktion SDL_RenderCopy () übergeben Sie 4 params:

  • ein Zeiger auf einen Renderer (wo Sie renderize werden).
  • ein Zeiger auf eine Textur (wo Sie die Sprite gehen zu bekommen).
  • Zeiger auf Quelle rect (Bereich und die Position, wo Sie das Sprite auf der Textur erhalten).
  • und Zeiger auf dest rect (Bereich und Position auf dem Renderer Sie zeichnen werden).

Sie sollten nur Ihre dest rect wie zum Beispiel ändern, wenn Sie ein Bild von 300 x 300 gehen zu machen und Sie wollen es skaliert, Ihre dest rect sollte sein wie 150 x 150 oder 72 x 72 oder was auch immer Wert, den Sie wollten Maßstab.

Lösung von Ibrahim CS funktioniert.

Lassen Sie mich auf dieser Lösung erweitern und den Code bereitstellt. Eine andere Sache zu beachten ist, neue Position (x, y) mit oben links zu berechnen, ist Ursprung skaliert Textur zu machen.

Ich mache es wie diese

// calculate new x and y
int new_x = (x + texture->w/2) - (texture->w/2 * new_scale);
int new_y = (y + texture->h/2) - (texture->h/2 * new_scale);
// form new destination rect
SDL_Rect dest_rect = { new_x, new_y, texture->w * scale, texture->h * scale };
// render
SDL_RenderCopy(renderer, texture, NULL, &dest_rect);

annimmt, dass texture SDL_Texture ist, und renderer ist SDL_Renderer, und Sie machen voll von Eingang Textur zum Ziel.

Sie haben keinen Code zur Verfügung gestellt, also werde ich Sie verwenden Texturen zu übernehmen und eine SDL_Renderer:

Bei der Verwendung von SDL_RenderCopy () wird die Textur gestreckt werden, um das Ziel SDL_Rect passen, so dass, wenn Sie das Ziel machen SDL_Rect größer oder kleiner Sie eine einfache Skalierung der Textur durchführen können.

https://wiki.libsdl.org/SDL_RenderCopy

Wenn Sie SFML stattdessen dann erhalten Sie einen sehr ähnlichen Satz von Cross-Plattform-Fähigkeiten, sondern die Grafiken sind Hardware beschleunigt und Funktionen wie Skalierung und Rotation kostenlos kommen, sowohl in Bezug auf keine zusätzliche Abhängigkeiten und in Bezug auf der Einnahme keine nennenswerte CPU-Zeit benötigen zu betreiben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top