SDL_Rect: negative Koordinaten
-
Bei mir ist etwas Seltsames vorgekommen: Ich definierte die x-Koordinate eines SDL_Rects mit einem negativen Wert. Beim ersten Blitten funktioniert alles perfekt, jedoch setzt die Blit-Funktion die x-Variable auf 0.
Ich brauche negative Koordinaten, weil ich nur Teile eines Bildes auf den Screen blitten will (für ein Scrolling eines Jump'n'Runs)SDL_Surface *screen, *image; // werden auch noch definiert SDL_Rect rect; rect.x = -100; // Definition (y,w und h werden ebenfalls definiert) // hier ist rect.x noch -100 SDL_BlitSurface(image,0,screen,&rect); // funktioniert noch gut // hier wurde rect.x auf 0 gesetzt SDL_BlitSurface(image,0,screen,&rect); // falsches Blitten, da x = 0Ist das ein Bug oder Absicht der SDL-Programmierer? Wenn Absicht, was bringt denen das?

Und ist die einzige Möglichkeit, dieses Problem zu umgehen, jedesmal vor dem Blitten die Variable neu zu setzen?
-
Ja, das ist Absicht, denn es steht so in der Dokumentation (lesen!).
Du kannst es umgehen, indem du nicht nur ein Dest-Rect, sondern auch ein Source-Rect verwendest. Wenn du also dein Bild bei -50, 0 darstellen willst, dann lässt du das Dest-Rect trotzdem bei x = 0 beginnen, dafür aber das Source-Rect bei x = 50.
-
Ja, ich verstehe, was du meinst, also einfach nur den Teil blitten, den man braucht. Daran habe ich auch schon gedacht, bei dem vorherigen (vereinfachten) Code ist das wohl das naheliegendste...
Nur bei meinem Jump'n'Run hab ich verschiedene Tiles, und es wär von Vorteil, wenn das Rect immer die gleiche Höhe und Breite haben kann, damit die einzelnen Tiles auch einheitlich sind. Also müsste ich für Tiles am Rand des Screens spezielle Rects anfertigen, die dann funktionieren.
Deshalb überlegte ich mir, ob ich jedesmal x neu setzen sollte, anstatt das ganze Rect neu zu definieren...
-
Schreib dir doch einfach ne einene Blit-Funktion, die ein Rechteck per Wertübergabe (nicht Zeiger) erwartet und dann die SDL-Funktion aufruft. Da kann es dann egal sein, ob SDL das Rechteck verändert oder nicht.
-
Ja, das wäre eine gute Idee.
Ist jedoch der Rechenzeitverlust durch die Funktion nicht grösser als durch das Neu-Setzen der Variable? Sonst würde es sich (zumindest theoretisch) nicht unbedingt lohnen (es sei denn, man müsse die Variable sehr oft zurücksetzen, bei mir ist es bis jetzt nur einmal)

-
Mir ist grad noch was eingefallen: Wäre es nicht einfach möglich, die Argumente als konstant zu übergeben, ohne dabei die SDL_BlitSurface-Funktion abzuändern?
Übrigens: falls nicht, bitte lasst mich leben
ich bin noch nicht sehr erfahren mit const etc.
-
Nein, das geht nicht.