Ecrans logiques et physiques [tutorial n°3]

Ecrans logiques et physiques [tutorial n°3]

Messagede Fantomas » Dim 18 Jan 2009 18:05

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écedent et dans laquelle nous pourrons afficher ou préparer un certain nombre de choses. Il est bien entendu possible de créer plusieurs écran logiques.

Remarque: sur Atari, c'est ce qui se fait avec ~XBIOS(5,L:XBIOS(3),L:XBIOS(2),res)

Voici comment notre exemple a évolué depuis la fois dernière:

Code: Tout sélectionner
' ---> Ecrans Physique et Logique en GFA Windows
OPENW #1,_X / 2 - 320,_Y / 2 - 200,640,400,%001110000
TITLEW #1,"SOTB !"
'
Hscreen1& = CREATEBMP(640,400)
Hsc1& = MEMDC(_DC(1))
SETBMP Hsc1&,Hscreen1&
'
SETDC Hsc1&
IF EXIST("fond.bmp")
  adr& = LOADBMP("fond.bmp")
  PUT 0,0,adr&
  FREEBMP adr&
ENDIF
SETDC _DC(1)
REPEAT
  PEEKEVENT
  IF MENU(1) = 21
    @redraw
  ENDIF
UNTIL MENU(1) = 4
CLOSEW #1
END
'
PROCEDURE redraw
  BITBLT Hsc1&,0,0,640,400,_DC(1),0,0,SRCCOPY
RETURN


Les nouveautés:

A la 3ème ligne, on réserve ue zone mémoire correpondant à la taille de notre image de fond, soit 640x400 pixels...Hscreen1& = CREATEBMP(640,400)
Instruction:
adr& = CREATEBMP(w&,h&) avec w& = largeur en pixels et h& = hauteur en pixels

L'adresse de la zone réservé est renvoyée dans Hscreen1& (pour 'Hidden screen1', mais vous pouvez la nommez toto& si vous voulez...

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):
Hsc1& = MEMDC(_DC(1))
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 cet 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 suivant SETBMP Hsc1&,Hscreen1& applique le contexte d'affichage créé précédement à 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 !

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. Das 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 (ecran '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.

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 acec l'instruction BITBLT

Instruction: BITBLT adresse source,xs,ys,largeur,hauteur, adresse destination,xd,y&,mode

Le mode peut prendre plusieurs valeurs si nous souhaitons faire des opérations logiques, notement pour l'affichage de sprites. Pour l'instant nous nous contenterons de SRCCOPY (la source
est copiée telle quelle dans la destination)
Vous pouvez trouver toutes les valeur de mode dans l'aide du GFW...

remarque: l'instruction BITBLT a la même syntaxe que RC_COPY en GFA

Bref ceux qui on 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 écran 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 :mrgreen:

En attendant, si vous avez des questions, des remarques, etc... n'hésitez pas, je ferai mon possible pour y répondre ;)

il est indispendable de bien comprendre ce système qui est la base de l'animation (démos, jeux)

Fantomas
Avatar de l’utilisateur
Fantomas
 
Messages: 43
Inscription: Dim 4 Jan 2009 11:52

Re: Ecrans logiques et physiques [tutorial n°3]

Messagede shadow272 » Dim 18 Jan 2009 20:13

Super bien tes tutos.
Félicitation.
Un ATARI, le GFA c'est le bonheur
Avatar de l’utilisateur
shadow272
Administrateur du site
 
Messages: 211
Inscription: Mer 15 Oct 2008 21:40
Localisation: Hainaut, Belgique

Re: Ecrans logiques et physiques [tutorial n°3]

Messagede leglod » Mar 14 Sep 2010 22:25

Faut pas qu eje regarde ca, si non je suis Nolife a nouveau :?
Avatar de l’utilisateur
leglod
 
Messages: 182
Inscription: Jeu 6 Nov 2008 22:33
Localisation: Montpellier (34) sud France


Retourner vers GFA PC

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron