PDA

Voir la version complète : y fé rien de ce que je lui dit


Cellimo
31/08/2005, 16h56
maaaaiiiiis euuuuuuuuh,
il est pas gentil, il veut pas faire ce que je veux faire !

#include <SDL/SDL.h>
#include <stdio.h>
#include <stdlib.h>

// Surfaces et rectangle
SDL_Rect rect;
SDL_Surface *Screen, *rectangle;

// Fonction d'affichage
void affichage()
{
// Coloration des surfaces
SDL_FillRect(rectangle, NULL,SDL_MapRGB(Screen->format, 255, 255, 255));
SDL_FillRect(Screen, NULL, 0);
// Définition de la zone à l'écran
rect.w = 1;
rect.h = 1;
rect.x = 100;
rect.y = 10;

// Blit de la surface à l'écran et affichage
SDL_BlitSurface(rectangle,NULL,Screen,&rect);
SDL_Flip(Screen);
}

int main (int argc, char **argv)
{
// Initialisation de SDL
if (SDL_Init (SDL_INIT_VIDEO) < 0) {
fprintf (stderr, "Erreur d'initialisation de SDL: %s\n",
SDL_GetError ());
return 1;
}
atexit (SDL_Quit); // Pour quitter proprement

// Initialisation de SDL_Video
Screen = SDL_SetVideoMode (640, 480, 32, SDL_SWSURFACE | SDL_DOUBLEBUF);
if (Screen == NULL) {
fprintf (stderr, "Erreur d'init du mode video: %s\n",
SDL_GetError ());
return 2;
}

// Allocation de la surface (pour l'instant vide)
rectangle = SDL_CreateRGBSurface(SDL_SWSURFACE,
320, 240, 32,
0, 0, 0, 0);

// Titre de fenêtre
SDL_WM_SetCaption ("Première appli SDL", NULL);

// Boucle infinie
while (true)
{
SDL_Event event; // Fermer la fenêtre proprement
if (SDL_PollEvent (&event) && event.type==SDL_QUIT)
break;
affichage(); // Mise à jour de l'écran
}

// Libération de la surface rectangle
SDL_FreeSurface(rectangle);
return 0;
}


voila normalement il devrai me tracer un rectangle (rempli) de 1x1
mais il m'en fait un bien plus grand,
coment jfé pour lui faire entendre raison ??

TrizoLakai
31/08/2005, 17h19
C'est ici qu'il y a problème :

// Allocation de la surface (pour l'instant vide)
rectangle = SDL_CreateRGBSurface(SDL_SWSURFACE,
320, 240, 32,
0, 0, 0, 0);

tu remplace par :

// Allocation de la surface (pour l'instant vide)
rectangle = SDL_CreateRGBSurface(SDL_SWSURFACE,
1, 1, 32,
0, 0, 0, 0);

remram44
31/08/2005, 17h52
C'est ici qu'il y a problème :

SDL_BlitSurface(rectangle,NULL,Screen,&rect);

NULL signifie que tu colles la surface "rectangle" en entière.

Cellimo
31/08/2005, 17h52
ok mais dans ce cas la, a quoi serve

rect.w = 1;
rect.h = 1;

???

Cellimo
31/08/2005, 17h53
lol double post

et je met quoi a la place de NULL ?

TrizoLakai
31/08/2005, 19h49
Si tu change commme je te l'ai dit plus ça fonctionnera. Sinon le mieu c'est de faire :
-1 Ce que je t'ai dit
-2 SDL_BlitSurface(Screen, &Rect, Image, &Rect);

Voila

ps : mais si tu change la taille d'origine de ton rectangle tu peut laisser NULL

Corkus
31/08/2005, 22h21
w et h ne sont pas pris en compte, puisse que tu copie le la partie que tu as sélectionné avec le rectangle source. Il utilise seulement x et y pour positionner l'image.

Cellimo
01/09/2005, 10h38
mais pourquoi mettre deux fois &rect ???

un sert pour donner la position
l'autre pour la taille

c'est ca ?

Corkus
01/09/2005, 12h04
Le premier rect sert à choisir quelle partie de la Surface source va être copier sur la surface de destination.

Le second lui, indique où on doit position la surface source sur destination.

Si le premier rect est NULL, tout la surface source va être copiée sur destination

Si le second rect est NULL, la surface source sera positionné au point (0,0) dans la surface destination.

remram44
01/09/2005, 16h40
Il faut préciser que si, comme dans ton code, les deux rectangles n'ont pas la même taille, la taille spécifiée dans le deuxième rectangle sera ignorée car SDL ne "sait pas" redimensionner en blittant.