3.2 Positionner cette nouvelle surface

Le système de repère de SDL est le suivant :

  • L'origine du repère est en haut à gauche de la fenêtre
  • Les abscisses sont positives vers la droite
  • Les ordonnées sont positives vers le bas

La position d'une SDL_Surface* est définit avec un SDL_Rect, comportant deux composantes x et y (pour ce qu'on veut faire).

1
2
3
SDL_Rect = position;
position.x = 0;
position.y = 0;

Comme ça devient vite fastidieux à faire je vous suggère de vous faire une fonction pour initialiser une SDL_Rect en C++ :

1
2
3
4
5
6
void initSDL_Rect(SDL_Rect & pos, int x, int y, unsigned int w, unsigned int h){
	pos.x = x;        //abscisse
	pos.y = y;       //ordonnées
	pos.w = w;      //longueur
	pos.h = h;     //largeur
}

Ou comme ceci en C :

1
2
3
4
5
6
7
void initSDL_Rect(SDL_Rect * pos, int x, int y, unsigned int w, unsigned int h){
	if(pos == NULL) return;
	pos->x = x;      //abscisse
	pos->y = y;     //ordonnées
	pos->w = w;    //longueur
	pos->h = h;   //largeur
}

Comme le passage par référence (&) n'existe pas en C il faut passer un pointeur et donc il faut tester si ce pointeur est NULL.

Un SDL_Rect définit en fait un rectangle mais on ne peut se servir que de la position si on veut. Le rectangle a le même repère que SDL.

Pour mettre la surface surf dans l’écran il faut écrire :

1
2
3
>SDL_Rect position;
initSDL_Rect(position, 0, 0, 0, 0);
SDL_BlitSurface(surf, NULL, ecran, &position);

Et on verra un rectangle noir sur le fond blanc, à la position (0, 0).