Diskussion:SDL: SDL Rect
SDL_Rect.jpg ist offensichtlich von den Größenverhältnissen nicht richtig. Das Rechteck ist etwa so hoch wie 100px laut Maßstab sind, die Höhe ist aber nur mit 50px angegeben. Es ist auch breiter als 100px.
- erledigt. Ich habe das Bild heruntergeladen, mit Gimp vermessen, anschließend verändert wieder hochgeladen. Es sollte jetzt, bis auf wenige Pixel, stimmen. --Gnushi 10:30, 4. Mär 2006 (UTC)
Beispiel code
BearbeitenWarum verwendet man nicht das SDL_Rect vom Surface selbst? Zum Besp.::
... SDL_Rect src; src.x = 0; src.y = 0; src.w = image->w; src.h = image->h; image->clip_rect.x = 100; image->clip_rect.y = 200; image->clip_rect.w = image->w; image->clip_rect.h = image->h;
SDL_BlitSurface(image, &src, screen, image->clip_rect); ...
oder wird das clip_rect im Surface eher für andere Anwendungen benötigt? Hab noch kein Beispiel gefunden wo es verwendet wird.
Wenn das geht würd ich mir die Blitfunktion z.B so überladen:
//Kopiere gesamtes SDL_Surface src nach dst. //Die Position wird in src->cliprect festgelegt inline int MySDL_BlitSurface (SDL_Surface *image, SDL_Surface *dst) { SDL_BlitSurface(image, null, dst, image->clip_rect); }
- Dieser Code ist sehr strange, möglicherweise funktioniert es. Man verliert die Übersichtlichkeit des einfachen Quellcodes mit 2 Variablen. Man gewinnt, den Speicherplatz für eine Variable (vielleicht 80 Bytes). Das clip_rect ist eigentlich, wenn ich das richtig sehe, relativ zum Bild, nicht relativ zum screen, so wie Du es gerade benutzt. Damit geht die Bedeutung des clip_rects (relativ zum image) verloren. Du könntest
int MyBlitSurface (SDL_Surface *image, SDL_Surface *dst) { SDL_BlitSurface (image, NULL, dst, dst->clip_rect); }
- benutzten, nach dem Du auf Deinem screen das clip_rect neu gesetzt hast. Mir ist dieser Code zu kompliziert, als dass ich ihn gerne verwenden würde. --Gnushi 09:44, 30. Jun 2006 (UTC)
Danke für deine Antwort. Ich hab mein Beispiel korrigiert und die Variablen umbenannt, damit man den unterschied zu deinem Beispiel besser sieht.