SDL2 Utilisation de la fonction SDL_Blitsurface()
Résolu/Fermé
poparnassus
Messages postés
426
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019
-
Modifié par poparnassus le 26/08/2016 à 05:19
poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019 - 30 août 2016 à 12:08
poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019 - 30 août 2016 à 12:08
1 réponse
paly2
Messages postés
254
Date d'inscription
vendredi 29 août 2014
Statut
Membre
Dernière intervention
15 février 2018
25
27 août 2016 à 17:47
27 août 2016 à 17:47
SDL_BlitSurface() permet de copier une surface sur une autre, exactement comme SDL_RenderCopy() copie une texture sur un renderer. Le dernier paramètre est quasiment le même: il s'agit du SDL_Rect qui indique la position à laquelle il faut copier la surface (les membres w et h sont ignorés, seuls x et y importent). Finalement donc une seule différence entre le 4ème paramètre de SDL_BlitSurface() et celui de SDL_RenderCopy(), c'est que SDL_RenderCopy est capable d'étirer ou de rétrécir la texture au moyen des membres w et h (que SDL_BlitSurface() ignore).
Mais SDL_BlitSurface() n'est plus utile et dépassée en SDL2, je ne comprends par ton problème avec SDL_RenderCopy()... En SDL, on nettoie toujours le renderer (avec SDL_RenderClear() et une couleur que tu choisis avec SDL_
SetRenderDrawColor()) avant de commencer à tracer, ce qui efface tout. Il ne faut pas avoir peur de retracer l'écran en entier dès qu'on modifie un petit détail, c'est ce que tout le monde fait.
Mais SDL_BlitSurface() n'est plus utile et dépassée en SDL2, je ne comprends par ton problème avec SDL_RenderCopy()... En SDL, on nettoie toujours le renderer (avec SDL_RenderClear() et une couleur que tu choisis avec SDL_
SetRenderDrawColor()) avant de commencer à tracer, ce qui efface tout. Il ne faut pas avoir peur de retracer l'écran en entier dès qu'on modifie un petit détail, c'est ce que tout le monde fait.
28 août 2016 à 07:35
Par contre j'ai un autre probleme que je n'arrive pas a identifié, j'ai une fonction chargement_image() qui est appeler dans la boucle principale, cette fonction definit mon rendu sur mon interface, donc j'ai mis une jolie petite image "Quitter" j'aai definit le SDL_Rect, SDL_Surface je la charge dans la fonction chargement_image(), elle s'affiche tout va bien, mais des que je rentre ce code dans ma fonction evenement:
avec la condition pour quitter quand la souris est dans le rectangle:
Quand je clique sur Quitter ca quitte ! Mais limage de fond se deplace avec la souris je pige pas, je peux mettre une video si tu veux.
28 août 2016 à 11:13
Mais déjà vérifie que tu n'utilises pas ecran->Rscreen ou input->sourisX dans cette fonction.
Modifié par poparnassus le 29/08/2016 à 11:51
La fonction affichage gere uniquement la partie graphique, donc debut de fonction j'efface le render, ensuite je charge les images si les conditions sont valider j'affiche les images , sauf pour l'image de fond qui est charger et afficher a chaque appel de la fonction; en debut de fonction
La ces ma fonction qui initialise la librairie SDL2, j'ai lu qu on pouvait integrer une texture dans le dernier parametre de SDL_createwindows, je me suis dit que cest peut la quon charge un arriere plan, mais j'ai pas trouver + dinfo
29 août 2016 à 12:56
Si tu veux nettoyer le renderer en le remplissant de blanc, il faut mettre le SetRenderDrawColor() avant :-)
Ou, vu que tu copies l'image sur tout l'écran, plus simplement:
(J'ai juste mis le 4ème paramètre à NULL.)
j'ai lu qu on pouvait integrer une texture dans le dernier parametre de SDL_init, je me suis dit que cest peut la quon charge un arriere plan, mais j'ai pas trouver + dinfo
Non, SDL_Init ne prend qu'un seul paramètre (ses flags).
DSL, je ne comprends pas en quoi la souris pourrait influer dans la façon dont l'image de fond est tracée :/
Modifié par poparnassus le 29/08/2016 à 13:34