Position d'un BMP sur la fenêtre

Le tutoriel en ligne vous pose quelques problèmes ? C'est ici pour en parler !

Position d'un BMP sur la fenêtre

Messagede YuGiOhJCJ le 02 Avr 2005 19:31

Salut,
voici le code pour afficher un BMP:

Code: Tout sélectionner
   /*Chargement du logo*/
   sfc_logo=SDL_LoadBMP(logo);
   if(sfc_logo==NULL){
           fprintf(stderr, "Impossible de charger le logo: %s\n", SDL_GetError());
                exit(0);
        }//Fin de la boucle if(sfc_logo==NULL)
   
   /*Affichage du logo sur la surface fenêtre*/
   SDL_BlitSurface(sfc_logo, NULL, sfc_fenetre, NULL);


Comment donner des valeurs X et Y à la surface pour qu'elle s'affiche par exemple au centre de l'écran?
Thx.
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede Mateooo le 03 Avr 2005 08:18

J'en ai marre de rien capter! :( Bon allez, je vais m'y mettre avec les tutoriaux, là... :)
Mateooo
 

Messagede moi1392 le 04 Avr 2005 15:55

c'est les deux paramètres que tu as mis à NULL qui découpent l'image et la placent au bon endroit.
Ils sont de type SDL_rect

Le premier definit la source, les coordonnées en x, y et la largeur et hauteur à découper dans l'image source, si tu le mets à NULL, ca veut dire que tu copie toute ta surface.

Le second c'est la cible, les champs x et y indiquent la position à l'écran, le w et le h ne servent pas.

tu fait alors un truc du genre :

Code: Tout sélectionner
SDL_rect source, dest;
source.x = 0;
source.y = 0;
source.w = 10; // largeur
source.h = 10; // hauteur

dest.x = 20;
dest.y = 20;
SDL_BlitSurface(sfc_logo, &source sfc_fenetre, &dest);


ce code te recopie un carré de dix pixels de coté qui commence en haut à gauche de ton image source, à la position 20,20 dans ton image cible !!

voila, j'espère que c'est ce que tu voulais.
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

Messagede YuGiOhJCJ le 05 Avr 2005 19:26

waw ça va c assez lourd à utiliser...
Je pensais aussi que c'était les 2 valeurs NULL à utiliser pour la position alors j'avais essayé d'y entrer des valeurs en pixel à la place:

Code: Tout sélectionner
SDL_BlitSurface(sfc_logo, 100, sfc_fenetre, 100);


Je pensais que ceci afficherait le logo dans la fenête à une position X=100 et Y=100. Mais non, c'est beaucoup plus complexe.
Ca va me demander plus de travail que prévu... :-k
Merci.
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

ah en fait ça va...

Messagede YuGiOhJCJ le 05 Avr 2005 19:32

Ah mais pour moi c bon je n'ai pas besoin de mettre de valeurs dans le 1er terme.
Je peux laisser NULL car je n'ai pas besoin de découper la source qui est déjà prévue comme il faut.
En fait il ne me reste que à entrer les valeurs pour le second terme pour choisir la position.
Ah ça me rassure tout à coup.

Par contre je ne connaissais pas du tout cette méthode avec le "." pour dest.x et dest.y. Ce n'est pas ce qu s'appelle des structures? En fait ya une structure dest qui est composé de x et y.
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

marche pô

Messagede YuGiOhJCJ le 05 Avr 2005 19:48

aille ça marchait pas:
error: `SDL_rect' undeclared (first use in this function)

Heureusement j'ai trouvé:

ce n'est pas:
SDL_rect position;

c'est:
SDL_Rect position;

Je tiens à préciser qu'il faut la majuscule "R". C'est pour ceux qui liraient ce topic et qui essaieraient de faire pareil :pouce:
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede moi1392 le 06 Avr 2005 09:26

desolé, excuses moi, et tout et tout... :oops:

d'habitude, je fait une petite vérif dans le coins prog quand j'ai un doute sur un nom de type ou de variable... mais làaa.. j'ai eu un peu la flemme :oops:

Par contre, programmer en C sans structure c'est asser limitant (même si au final, tu peux faire la même chose) tu devrais t'u mettre :

Code: Tout sélectionner

/* déclaration d'une nouvelle structure (il y a plusieurs facon de le faire...) */

typedef struct
{
    int x;
    int y
}  MaStructurePoint;

/* utilisation de la structure */

/* déclaration de deux variables de type  MaStructurePoint */
MastructurePoint point1, point2;

/* utilisation des variables */
point1.x = 3;
point1.y = 4;

point2 = point1;
point2.y = 5;

printf("point1 : (%d,%d)\npoint2 : (%d,%d)", point1.x, point1.y, point2.x, point2.y);


ce code affiche comme résultat :

Code: Tout sélectionner
point1 : (3,4)
point2 : (3,5)


Voila :) c'est beaucoup plus pratique que de se trimbaler avec plein de variables !!!
par exemple, tu peux t'inspirer du code du tutorial 5, ou je déclare une structure "sprite" avec deux SDL_Rect (un source et un cible), une surface source, et d'autres choses pour gérer l'animation.. dans un vrai jeux tu pourrais y ajouter les points de vie, la force, ...

comme ca si tu as 10 sprites, ca t'évire de déclarer 1392 variables.. tu te contentes de 10 variables de type "Sprite" qui contiennet toutes les autres nécessaires !!

Ca fait du code beaucoup plus clair en plus !!
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

Messagede YuGiOhJCJ le 06 Avr 2005 12:28

ah ok je comprends le truc :-k
C'est assez complexe à utiliser. Mais ça aide pour que ça soit plus clair.

Autrement on aurait toutes ces variables:
Code: Tout sélectionner
int x_point1;
int y_point1;
int x_point2;
int y_point2;


Ce qui fait 4 variables.

Avec les struct on fait:
Code: Tout sélectionner
int x;
int y;


et après avec ces 2 variables, on les associe à n'importe quelle variable.point1, point2, ...

Bon quand même au final on a un peu la même chose. Même du point de vue nombre de variables je crois que ça revient au même parce qu'il faut quand même déclarer les variables de type de la structure...Et donc on se retrouve quand même au final avec 4 variables à déclarer: x, y, point1 et point2.

Le seul gros avantage que je vois c'est qu'on peut dire que point1=point 2 et là ça associe le x et le y de point2 à point1 en une seule insctruction. C'est cool.
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede moi1392 le 06 Avr 2005 13:43

ca ne reviens pas du tout au même, car une fois que ta structure est déclarée, tu peux déclarer 10 point !! en plus un point ca veux dire quelquechose, alors qu'un x1 et un y1, ca peut faire partie d'un point, d'un rectangle, ca peut être les variables d'une équation, ....

Il ne faut pas oublier que si on utilise des langages de "haut niveau", c'est SEULEMENT pour nous faciliter la vie à nous humains !! du point de vue du résultat, on pourrait tout écrire en binaire avec un clavier à seulement deux touches (un 0 et un 1), mais bon... ca rendrait tout de suite le tout moins interressant :D

en plus, pour une structure de type rectangle, tu passes de 4 variables à 1, et ensuite, dans une nouvelle structure, au lieu de mettre des int, du peux mettre des rectangles, donc une structure à deux rectangles (source et dest par exemple) ca te fait une variable au lieu de 8 ...

Si tu lis un peu les programmes qu'on trouve sur le net (kernel, apache, ...) tu verras qu'on y trouve des structures asser conséquentes...

Non, ca n'est pas qu'un gadget, habitue toi à les utiliser ! c'est important !

Lis attentivement le tutorial 5 sur les sprites !! d'ailleur je vais un peu le continuer cet après midi :)
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

Messagede Vally8 le 06 Avr 2005 13:53

moi j'aime bien quand :

moi1392 a écrit:d'ailleurs je vais un peu le continuer cet après midi


:D
Moi, j'aime schtroumpfer...
Si vous voulez faire une soluce, plutôt que de m'envoyer un MP, postez-là ici (j'ai rarement le temps de répondre à tous les MP)
Avatar de l’utilisateur
Vally8
Gouroute du Site
Gouroute du Site
 
Messages: 15567
Inscription: 07 Mai 2004 18:14
Localisation: Au pays des schtroumpfs
Jeu(x) du moment: Professor Layton, Tales of Vesperia, Dragon Quest 9

sprite

Messagede YuGiOhJCJ le 03 Juil 2006 08:22

Justement j'ai un peu de mal avec ton programme sprite...En le lisant j'ai du souci pour comprendre tout.
Ca devient vite compliqué avec l'appel d'une fonction par là, d'une structure par ici, ...Je me mélange les pinceaux #-o
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede moi1392 le 04 Juil 2006 10:13

ça viendra avec de l'habitude !

si tu as du mal, contente toi de le recopier pour le faire marcher (pas un copier-coller, copie le vraiment, on retient beaucoup mieux comme ça !)
et ensuite amuse toi avec, essais de changer des valeurs et des petits trucs à droite et à gauche. Et tu commenceras à mieux comprendre comment ça marche :oui:

si tu as un problème sur un point en particulier, tu peux toujours m'en parler !
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

C bon

Messagede YuGiOhJCJ le 14 Aoû 2006 21:15

moi1392 a écrit:ça viendra avec de l'habitude !

si tu as du mal, contente toi de le recopier pour le faire marcher (pas un copier-coller, copie le vraiment, on retient beaucoup mieux comme ça !)
et ensuite amuse toi avec, essais de changer des valeurs et des petits trucs à droite et à gauche. Et tu commenceras à mieux comprendre comment ça marche :oui:

si tu as un problème sur un point en particulier, tu peux toujours m'en parler !


J'ai bien relu les sources et finalement je comprends maintenant le rôle de chaque fonction.
Il y a juste un truc qui me perturbe: certaines fonctions ne retournent rien pourtant, les variables qu'elle modifie sont gardées dans le programme principal et peuvent être réutilisées(fonction main).
Je me demande si ce n'est pas parce que ces variables sont des pointeurs(il y a un '*' devant).
Ainsi les pointeurs n'auraient pas besoin d'être retournés par les fonctions externes pas vrai? Enfin c'est ce que je peux en déduire.
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede moi1392 le 15 Aoû 2006 11:52

c'est "à peu près" ça.
Un pointeur est une variable qui représente l'adresse en mémoire d'un objet (variable, structure, même fonction !)

donc, ce que je modifie n'est pas la variable elle même (qui est un pointeur) car les modifications seront perdues à la fin de la fonction, mais l'objet pointé par cette variable.

par exemple, si je compare un pointer à une adresse réelle. Si je file mon adresse à quelqu'un sur un bout de papier, et qu'il la change, ça ne changera pas mon adresse car il n'aura modifié que le bout de papier qui est une copie de mon adresse et pas mon adresse réelle.
Par contre, si grace à ce bout de papier, il viens chez moi et repeint mes murs en rouge, alors oui, quelque chose aura changé ;)

je peux te donner d'autres exemples du genre si ça t'aide à comprendre :)
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

ok ^^

Messagede YuGiOhJCJ le 16 Aoû 2006 15:12

Heu nen merci ce genre de comparaison m'éloigne de la réalité du développement et ça me complique encore un peu + le problème.

Par contre, si on résume:
Un pointeur c'est une adresse physique dans l'ordinateur, donc inutile de le retourner dans chaque fonction lorsque sa valeur a été modifiée(contrairement à une variable).

C'est ça j'éspère? :question:
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede moi1392 le 16 Aoû 2006 15:33

ce n'est pas la valeur du pointeur que je change, mais la valeur de l'objet pointé

SI je changait la valeur du pointeur :

Code: Tout sélectionner
void f(int *p)
{
  int i;
  p = &i;
}

ça n'aurait aucun effet une fois sortie de la fonction, car "p" est une copie du pointeur que j'ai passé.
Par contre, si je change la valeur de l'objet pointé :

Code: Tout sélectionner
void f(int *p)
{
  *p = 3;
}

void bar
{
  int i;
  int *p = &i;
  f(p);
}


alors là, ca que je change, c'est ce qu'il y a à l'adresse mémoire pointée par p. Et donc, c'est la valeur de i que je change, et même si à la fin de la fonction f, toutes les modif faites sur p sont perdues (car p n'existe plus en mémoire) celle faites sur i sont toujours là ;)
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

mmm...

Messagede YuGiOhJCJ le 20 Aoû 2006 23:22

Oh lala les pointeurs c'est encore trop complexe pour moi #-o
Bon c'est pas grâve ça viendra au fil du temps.
Merci pour tes explications :pouce:
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer


Retourner vers Besoin d'aide en SDL ?

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités

cron