Tom's Guide > Forum > Programmation > [c++/SDL]Comment "déblitter" une surface

[c++/SDL]Comment "déblitter" une surface

Forum Programmation : [c++/SDL]Comment "déblitter" une surface

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonjour , je voudrais savoir comment on peut "déblitter" une surface de l'ecran. Par exemple j'ai une surface nommée "message" qui contient du texte . Une fois que je l'ai blitter ,je change le texte de cette meme surface et je la blitte de nouveau . Le nouveau texte va etre superposé par dessus l'ancien . Donc il faut d'abbord que j'enleve une surface de l'ecran avant de la modifier et la bitter a nouveau . Comment fait on ?
Merci

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

le flipping c'est la technique du double-buffering: tu n'affiche pas directement à l'écran, mais dans un buffer.
Pour effacer l'écran, tu mets un grand rectangle noir dans le buffer (SDL_FillRect(...)) puis, tu réaffiche le sprite dessus.
Si on faisait ça directement sur l'écran, on verrai un clignotement des sprites à cause de l'affichage du rectangle par dessus le sprite puis l'affichage du sprite sur le rectangle etc.
Avec le double buffering, tu n'affiches à l'écran que lorsque tu as finis de coller tous tes sprites (ou textes). Rien ne s'affiche entre l'affichage du rectangle et l'affichage du sprite. Résultat: ça ne clignote pas.

Voici un tutorial qui montre comment faire des sprites:
http://lazyfooproductions.com/SDL_tutorials/lesson06/preview.php

EDIT: désolé, j'ai mis blitting alors que c'est flipping. pour forcer l'affichage du buffer à l'écran, il y a SDL_Flip()

Répondre à CRicky

Sa veux dire que si je veux effacer ma surface avec mon texte , je dois en creer une autre et la coller par dessus , puis encore une autre par dessus qui contient le nouveau texte c'est ca ?

Répondre à peacend_breack

Dans ta boucle principale, tu affiche simplement un rectangle qui efface tout, puis tu met ton nouveau texte, et tu affiche à l'écran avec le flip.

EDIT : à l'image de cet exemple:
http://lazyfooproductions.com/SDL_tutorials/lesson12/index.php

Répondre à CRicky

Merci , j'ai réussi . Et pendant que je suis la , comment peut on afficher une touche appuyée ?
Je te remercie pour tes tutos CRicky mais je suis faché avec l'anglais . ;-)
Merci

Répondre à peacend_breack

pour la touche, si c'est un caractère, tu peux utilsier (char)event.key.keysym.unicode
comme ici:
http://lazyfooproductions.com/SDL_tutorials/lesson24/index.php

si c'est une touche spéciale, tu peux faire au cas par cas comme ici:
http://lazyfooproductions.com/SDL_tutorials/lesson08/index.php

sinon ceci (en français ;-) ):

http://www.libsdl.org/intro.fr/usingeventsfr.html

La doc de base étant:
http://www.libsdl.org/intro.fr/tocfr.html

Répondre à CRicky

C'est bon , j'y arrive . Merci beaucoup pour toutes tes reponses . :-D

Répondre à peacend_breack

ca pourrait pas fonctionner si on mettait un SDL_free avant de changer le texte et apres tu recréé ta surface ? ca permettrait d'utiliser moins de mémoire et éviter les fuites non ?

Répondre à mousk@IDN

oui il vaut mieux réutiliser le même en faisant un free si c'est juste le texte qui change.
Et faire des free sur tous les textes restant à la fin de son utilisation.

Répondre à CRicky
Tom's Guide > Forum > Programmation > [c++/SDL]Comment "déblitter" une surface
Aller à :

Il y a 2413 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens