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

17.03.2012, 22:34

SDL: Sprites variabel im Vordergrund/Hintergrund rendern

Guten Abend, ich gehöre hier zu den vielen Membern, die das Spiel aus Kapitel 12 (C++ für Spieleprogrammierer) am Verändern sind und dazu eine Frage haben :P (soll heißen, ich bin blutiger Anfänger).

Nun zu meiner Frage: Wie erreiche ich mit der SDL, dass ein Sprite einmal im Vordergrund, in einem anderen Fall aber im Hintergrund gerendert wird?

Generell ist es ja so: je weiter unten die Renderfunktion im Quellcode steht, desto weiter oben wird es gerendert (im Spiel aus Kapitel 12 in der Game.Run). Was mache ich aber, wenn ein Sprite einmal vor und einmal hinter einem anderen Bild gerendert werden soll? Schon bei 3 Sprites würde das mit If-Bedingungen festzulegen in eine ziemliche Zumutung ausarten.
Genauso beispielsweise mit Bäumen: die Renderreihenfolge mit If-Bedingungen einzustellen, damit der Stamm des hinteren Baumes nicht vor dem vorderen Baum zu sehen ist, halte ich ja für so gut wie unmöglich, wenn ich ein paar mehr Bäume habe.

Ich habe mir mal die SDL-Funktionen angesehen und fand nur SDL_UpdateRects als einen geeigneten Kandidaten, um das Problem anzugehen. Allerdings ist mir schleierhaft, wo ich den wie im Spiel aus Kapitel 12 verwenden könnte... und ob die Funktion überhaupt geeignet ist.
Außerdem habe ich gelesen, dass mit der Funktion aus Performance-Gründen nicht zu spaßen ist.

Über ein wenig Hilfe würde ich mich freuen, so etwas wie "wieso verwendest du SDL, nim doch [...] kann ich dann allerdings nicht brauchen.
Außer, wenn es mit der SDL unmöglich ist :)

Lares

1x Contest-Sieger

  • Private Nachricht senden

2

18.03.2012, 01:00

Du brauchst lediglich für jedes Sprite eine zusätzliche "Z-Achse" oder Tiefenangabe. Beim Rendern werden dann zuerst die Sprites gerendert, die die niedrigste (oder höchste je nachdem wie rum du das machen willst) Tiefenangabe haben. Danach alle mit der zweiniedrigsten bzw. zweihöchsten usw. Falls du sehr viele Abstufungen hast, kannst du deine Liste, in der deine Sprites gespeichert werden gemäß der Tiefenabstufung sortieren und nacheinander rendern.

3

23.03.2012, 19:30

Das ist freilich eine recht simple Lösung, auf die ich eigentlich auch hätte kommen können ^^
Danke für den Tipp,hilft mir sehr :)

Werbeanzeige