CODINGAMSTAR ★ TECHNIQUE DES MASQUES ★

Initiation à L'Assembleur Amstar&CPC 28: Vidéo - Sprites - Technique des Masques|Amstar&CPC)Coding Amstar

Cet article fait suite à la série d'articles du même titre de Claude Le Moullec (CPC n° 22 et n° 25). Pour les lecteurs d'Amstar, je dirais qu'il s'agit d'une initiation qui risque de leur être très utile s'ils comptent réaliser un jeu mais n'en ont pas les moyens techniques. En bref, ce qui suit va vous apprendre à animer des objets (appelés sprites) sur l'écran.

RAPPELS

Fidèles lecteurs, it vous est arrivé au moins une fois dans votre vie d'acheter un soft qui vous plaisait (au lieu de le pirater, petits coquins !). De toute façon, parmi la ribambelle de jeux qui composent votre bibliothèque, rares sont ceux où il n'y a pas d'animations. M'enfin, voyons, vous avez tous dirigé le plus habilement du monde (Je n'en doute pas I) le dernier vaisseau rescapé de la planète pour détruire et anéantir les envahisseurs, ça vous y avez joué au moins une fois ! Eh bien, le sprite, c'est votre vaisseau, ou encore les ennemis, ou bien les différentes images formant l'explosion. Donc les sprites, c'est tout ce qui bouge sur votre écran. Au sprite, on associe une matrice qui est le rectangle suffisamment grand pour contenir le sprite. Cette matrice a deux dimensions ; largeur et hauteur.

1ère étape : on copie en mémoire ia zone d'écran sur laquelle on désire afficher le sprite. Cette zone correspond à un rectangle de la même taille que la matrice.

2ème étape : on affiche le sprite à l'endroit voulu,

3ème étape : elle a lieu lorsqu'on désire déplacer le sprite à un endroit différent de l'écran. Si on repasse directement par la première étape, on va donc resauvegarder une partie du décor pour réafficher /e sprite. Oui mais notre premier sprite est toujours à l'écran. Il faut donc l'effacer et ceci en affichant sur celui-ci la partie du décor que l'on avait sauvegardé auparavant Maintenant on peut retourner à la première étape et ainsi de suite.
Voilà en gros la technique des masques. Le seul problème lorsqu'on réalise une routine exécutant ces trois étapes, apparaît lorsque l'on désire effectuer plusieurs déplacements à suivre, le cycle «efface sprite, réaffiche sprite» fera flasher légèrement l'animation, ce qui ne sera pas très Joli dans le cas de sprites de taille moyenne, mais qui ne se verra pas dans le cas de sprites assez petits. L'autre problème est la taille des sprites à animer : 8 pixels sur 8, ça fait un peu juste, surtout en mode 0 !

La technique des masques a pour but de déplacer des sprites sans altérer le décor qui se trouve sous ces derniers. Il y a donc 3 étapes.

UNE SOLUTION

J'ai créé une routine qui remédie à tout cela. Elle effectue les 3 étapes en même temps. Enfin, pas tout à fait en même temps puisqu'elle effectue un bout de la 1 ère étape, un bout de la seconde, un bout de la 3ème, puis elle recommence. Résultat, le flashage a disparu.

FONCTIONNEMENT

• Il y a 3 routines : 2 routines pour l'initialisation et une pour l'utilisation principale.

- La routine principale s'appelle par CALL &A000
- La première routine d'initialisation qui correspond à la première sauvegarde d'écran, s'appelle par CALL &A0A0
- La seconde routine d'initialisation qui correspond au premier affichage du sprite, s'appelle par CALL &A070

INITIALISATION
 

• Il faut d'abord entrer la case mémoire à partir de laquelle on sauvegarde l'écran à l'adresse &A200

Exemple, si l'adresse mémoire où je désire stocker ma portion d'écran est &9500, alors je tape:

POKE &A200,&00
POKE &A200,&95

Ensuite, Il faut de la même manière, entrer l'adresse écran où l'on désire afficher le sprite, en à A204

Exemple : adresse écran = & C7C5 nous donne :

POKE &A204,&C5
POKE &A205,&C7

Puis, il reste à entrer les dimensions de la matrice :

POKE &A208, (largeur en octets)
POKE &A209, (hauteur en lignes)

Maintenant : CALL &A0A0 et la portion d'écran est sauvegardée. Ensuite, poker en &A200, l'adresse mémoire où est logé le sprite :

POKE &A200,&00    adresse =
POKE &A201,&90  /  &9000 (exemple)

Puis CALL &A070, et le sprite s'affiche. Maintenant voyons l'usage après utilisation :

En:

&A200
&A201 /  adresse mémoire du sprite
&A202 adresse mémoire de
&A203 /' la portion d'écran
&A204 adresse écran où l'on veut
&A205 / afficher le sprite
&A206 adresse écran où le sprite étajt affiché
&A207 / avant le déplacement
&A208 > largeur de la matrice en octets
&A209 > hauteur de la matrice en lignes
puis CALL & A000

A noter qu'il faudra tout repoker avant chaque déplacement. Et maintenant, il vous reste à taper le listing exemple qui confirme mes dires. Vous déplacerez un bidule sur l'écran au joystick et de droite à gauche. J'attire votre attention sur la manière de poker les adresses à partir des variables :

   1        ->           2
variable         conversion hexa
   3        ->           4
 on prend l'octet     on prend l'octet
fort et on le poke      faible et on
                          le poke

Et maintenant, si vous avez compris, que faites-vous à attendre en train de lire ce que je vous écris ! Vous devriez déjà nous avoir concocté au moins un bon listing pour CPC, ou être en train de le faire ! Bon courage et à vos claviers !

Emmanuel GUILLARD , AMSTAR & CPC n28

★ ANNÉE: ???
★ AUTEUR: Emmanuel GUILLARD

Page précédente : Initiation à L'Assembleur Amstar&CPC 28: Vidéo - Pour Quelques Effets Visuels de Plus (Amstar&CPC)

CPCrulez[Content Management System] v8.75-desktop/c
Page créée en 112 millisecondes et consultée 590 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.