Hallo,
Ich hab’s mal ausprobiert und wurde verwirrt: Es wird nur ein
breiter, langer Balken angezeigt, dessen Inhalt je nach x und
y Parameter variiert.
Hier ist ein Auszug aus meinem Quellcode:
SDL_Rect schneiden;
schneiden.x=50;
schneiden.y=100;
Da fehlt ja auch die Hälfte. Generell wird bei SDL ein Rechteck durch zwei Koordinaten für die linke, obere Ecke (ist bei Dir angegeben) und durch Breite und Höhe definiert (fehlt bei Dir).
So kannst Du z.B. für eine Animation alle Teilbilder in eine Bitmap packen und dann die linke, obere Ecke wandern lassen. Oder aber (wie in Deinem Fall), die linke obere Ecke konstant lassen und den Bildauschnitt vergrößern.
Wichtig ist, die SDL_Rect Struktur, die neben der SDL_Surface Struktur von SDL_BlitSurface benötigt wird, sieht vollständig so aus:
typedef struct{
2 Sint16 x, y;
3 Uint16 w, h;
4 } SDL\_Rect;
Merkst Du, was bei Dir fehlt? Ich gehe davon aus, dass „imageDeFond“ und „ecran“ zwie Quell- und Zielflächen sind. Wobei ecran im Videospeicher liegen sollte, also über „SDL_SetVideoMode()“ initialisiert wurde.
Ohne einen anschließenden Aufruf von SDL_UpdateRect sollten die Änderungen des SDL_BlitSurface() allerdings nicht sichtbar sein.
Du solltest Dir einfach mal die Dokumentation zu den genannten Funktionen und Strukturen anschauen. Die gibt es umfangreich auf der SDL Website:
http://www.libsdl.org/cgi/docwiki.cgi/SDL_API_by_name
Wie müsste der Quellcode aussehen, dass imageDeFond von oben
bis unten komplett, aber nur die linke Hälfte angezeigt würde?
Ich kenne ja Deine Grafik nicht. Nur Du weißt, wieviele Pixel sie hat (Berite und Höhe). Startkoordinaten wären dann auf jeden fall mal 0,0, denn Du willst ja ganz oben ganz links anfangen. Und dann Breite = Breite der Grafik in Pixeln/2 und Höhe = Höhe der Grafik in Pixeln.
Also:
SDL\_Rect srcrect;
copyrec.x = 0;
copyrec.y = 0;
copyrec.w = ?\>;
copyrec.h = ?\>;
SDL\_Rect dstrect;
...
Und dann später
SDL\_BlitSurface(imageDeFond, &srcrect, ecran, &dstrect);
SDL\_UpdateRect(ecran,0,0,0,0);
Gruß
Fritze