L'écran physique c'est ce que l'on voit sur notre moniteur, l'écran logique c'est une zone mémoire qui sera compatible avec le précédent et dans laquelle nous pourrons afficher ou préparer un certain nombre de choses. Il est bien entendu possible de créer plusieurs écrans logiques.
Voici comment notre exemple a évolué depuis la fois dernière:
Les nouveautés
À la 3ème ligne, on réserve une zone mémoire correspondant à la taille de notre image de fond, soit 640x400 pixels... Hscreen1& = CREATEBMP(640,400)
Instruction :
avec w& = largeur en pixels et h& = hauteur en pixels
L'adresse de la zone réservée est renvoyée dans Hscreen1& (pour "Hidden screen1", mais vous pouvez la nommer toto& si vous voulez...
Device Context
Ensuite on définit un Device Context (DC) compatible avec l'écran physique (en GFW _DC(1) contient l'adresse de l'écran physique donc celui que l'on voit) avec l'instruction MEMDC(DC):
Je n'ai pas trouvé de traduction claire pour "Device Context"... je dirai "Contexte d'affichage". En effet un dessin contient un certain nombre de couleurs, une certaine organisation des bits en fonction du mode graphique... donc cette instruction permet dans notre cas de créer un contexte d'affichage compatible avec l'écran que nous sommes en train de regarder
L'instruction suivante SETBMP Hsc1&,Hscreen1& applique le contexte d'affichage créé précédemment à la zone mémoire de 640x400 que nous avons réservée.
Nous avons donc à l'issue de ces 3 instructions une zone mémoire cachée de 640x400 pixels compatible avec celle qui est affichée dans notre fenêtre sur l'écran visible !
Redirection des instructions graphiques
Ensuite SETDC Hsc1& indique que nous souhaitons que les prochaines instructions graphiques se fassent non plus sur l'écran physique mais sur l'écran logique. Dans notre cas ce sera le PUT quelques lignes plus bas !
Les lignes suivantes que du classique: on charge le fond en mémoire à l'adresse adr&, puis on l'affiche sur l'écran avec l'instruction PUT, sauf que l'image ne s'affichera pas dans notre fenêtre mais dans la zone mémoire compatible (écran logique) puisqu'on l'a demandé avec l'instruction SETDC Hsc1& !
Ensuite avec SETDC _DC(1) on redirige les instructions graphiques sur l'écran physique et on rentre dans notre boucle REPEAT/UNTIL bien connue.
Le redraw avec BITBLT
C'est au niveau du redraw que nous avons des changements, puisqu'au lieu de charger l'image sur le disque comme nous le faisions dans le second tutorial, on copie ici notre image qui se trouve dans l'écran logique sur l'écran physique avec l'instruction BITBLT
Instruction :
Le mode peut prendre plusieurs valeurs si nous souhaitons faire des opérations logiques, notamment pour l'affichage de sprites. Pour l'instant nous nous contenterons de SRCCOPY (la source est copiée telle quelle dans la destination)
Bref ceux qui ont déjà réalisé des démos ou jeux sur Atari ST/Falcon doivent se rendre compte que c'est exactement la même chose en GFW, à part quelques instructions qui changent !!!
Il est bien sûr possible de créer plusieurs écrans logiques, c'est d'ailleurs ce que nous ferons pour l'écran de Shadow Of The Beast... puisque la prochaine fois nous animerons un peu ce fond !
Il est indispensable de bien comprendre ce système qui est la base de l'animation (démos, jeux)