1

Salut à tous
Je viens de me mettre à la prog en C sous TIGCC, pour l'instant tout va "bien" à part que j'ai un sérieux probleme pour gerer l'affichage...j'ai eu beau faire tous les topics dessus et chercher "double buffer" sur le net j'ai pas réellement trouvé comment faire un affichage fluide
j'aimerai donc savoir si vous pouviez m'aider
je vous donne un exemple de code fait à la va vite juste histoire de voir que l'affichage "clignote" #include <tigcclib.h> INT_HANDLER sauvegarde_autoint1; // Main Function void _main(void) { void *ecran_virtuel=malloc (LCD_SIZE);  //on donne la mémoire pour l'écran virtuel LCD_restore (ecran_virtuel); sauvegarde_autoint1 = GetIntVec (AUTO_INT_1); SetIntVec (AUTO_INT_1, DUMMY_HANDLER); static unsigned char balle[] = {0x18,0x7E,0xFF,0xFF,0xFF,0xFF,0x7E,0x18}; short xballe=50,yballe=60,exit=0,depx=1,depy=1; clrscr(); PortSet (ecran_virtuel, 159, 99); //on "dessine" dans l'écran virtuel do {                           if(xballe <= 1 || xballe >= LCD_WIDTH)           {                depx *= -1;           }                      if(yballe >= LCD_HEIGHT || yballe <= 1)           {                depy *= -1;           }           xballe += depx;           yballe += depy;                      LCD_restore(ecran_virtuel);           Sprite8(xballe,yballe,8, balle,LCD_MEM,SPRT_OR);                      if(_keytest(RR_CLEAR) || _keytest(RR_ESC))           {                exit=1;           }                             }while(exit != 1);      SetIntVec (AUTO_INT_1, sauvegarde_autoint1);      PortRestore();  }

merci d'avance

2

C'est parce que Sprite8() n'est pas affecté par PortSet() : au lieu de dessiner au même endroit que les fonctions du tios, elle dessine selon le 5è paramètre que tu lui passes ; donc il faut que tu passes ecran_virtuel à la place de LCD_MEM ^^

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

3

merci beaucoup...c'est pas bete ^^ grin
maintenant j'ai plus qu'a trouver comment effacer l'image d'avant sinon ca se supperpose
est-ce que je peux "remplir" ecran_virtuel de 0 ? enfin le vider

4

C'est possible, regarde du coté de "memset"
Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici

5

merci bobti!
j'ai fais un memset:
memset(ecran_virtuel, 0, LCD_SIZE);

je sais pas si c'était le mieux mais ca marche ^^

6

Le mieux dépend de ton programme ^^
Par exemple si tu as juste quelques objets simples et peu d'objets mobiles, tu peux animer en xor pour ne modifier que les parties de l'écran qui ont changé.
Ou au contraire si ton programme affiche une image quelconque, ou dessins d'une manière ou d'une autre tout l'écran, tu n'as pas besoin d'effacer du tout smile

7

En pratique si tu as pas mal d'objets qui bougent c'est quand même la meilleure méthode d'effacer tout l'écran systématiquement et d'utiliser des routines de sprites optimisées smile (Sprite8 est pas du tout optimisée, il faudra que tu utilises une autre routine quand tu auras besoin de vitesse)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)