Suivez-nous sur X
|
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
ALL
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
Programmation : C - Dual Playfield (double champ de jeu)
(Article écrit par Batchman et extrait d'Amiga News - juillet 1991)
|
|
Résumé de l'épisode du mois dernier : après m'être rendu Maître
du Temps, je m'attaquais à l'espace-temps (je passe sur les détails).
Je n'aurais aucune chance en politique : je tiens mes promesses. En effet, j'ai réussi à
maîtriser l'espace-temps. Comment est-ce arrivé ? Le mois dernier, alors que je venais
de terrasser l'ex-Maître du Temps, je n'ai pas vu une faille spatio-temporelle (intergalactique).
Du coup, je suis tombé dedans et j'ai changé d'espace-temps. Très difficile d'expédier mon article
depuis cet espace-temps mal famé (c'est en banlieue) à Amiga News, à Toulouse, dans l'autre
espace-temps ! (heureusement, pour tous vos envois comme pour vos SICAV, pas de problèmes,
la Poste est là).
Je peux donc passer d'un espace à autre, par Toutatis ; j'existe dans deux espaces différents,
par Bélénos ! Ça ressemble fort aux Dual Playfields (double champ de jeu) de Amiga, par exemple.
Bien, si vous lisez toujours (même après cette introduction plus que laborieuse), c'est que vous
êtes vraiment intéressés par les doubles champs de jeu. Ce courage est louable !
En fait, le contenu de cet article est tellement subtil, pointu, que, pour décourager les
amateurs trop petits bras, pas assez motivés, je dois leur imposer l'épreuve de l'intro
débile. Mais au moins, ça évite des accidents à ceux qui abandonnent ; oui, je l'avoue,
je sélectionne mes lecteurs.
Qu'est-ce qu'un double champ de jeu ?
Un double champ de jeu, ça ne veut rien dire, puisque comme les Dupond, ils vont toujours
par deux. Voilà pour dual. Maintenant, pour champ de jeu (vous avez remarqué comme la
difficulté est progressive ?), on peut considérer qu'il s'agit d'une scène ou d'un plan.
L'intérêt des doubles champs de jeu est de faire apparaître dans le même écran deux scènes
différentes superposées, mais indépendantes. Exemple lumineux : imaginez un jeu de simulateur
de vol. On voit défiler le paysage dans le fond et, au premier plan dans la cabine de pilotage,
on surveille les instruments de vol. Il y a deux plans différents : chacun peut être représenté
par un "playfield" (champ de jeu). Le mode qui, sur Amiga, vous permet d'avoir deux plans de dessin est
appelé mode "Dual Playfield" (double champ de jeu).
Comment ça marche ?
Il est possible de dessiner dans un plan, sans affecter bien sûr, l'autre plan.
Enfin, la couleur de fond du premier plan est transparente pour laisser apparaître
le deuxième plan. Techniquement, c'est réalisé de la façon suivante :
sachant qu'un écran peut comporter jusqu'à six plans de bits, il est possible de les répartir
entre deux plans. Chaque plan peut donc comporter un, deux ou trois plans de bits.
Vous voyez tout de suite que ça limite les possibilités au niveau des couleurs :
trois plans de bits, ça équivaut à huit couleurs. Et encore, seulement pour le plan de fond,
car je vous rappelle que pour le premier plan, la couleur de fond est transparente donc
inutilisable pour dessiner.
La méthode pour obtenir un affichage de double champ de jeu est la suivante :
- Il faut avant tout ouvrir un écran, d'une profondeur d'au plus trois plans de bits.
- Allouer ensuite de nouvelles structures d'affichage (BitMap, RastPort et de un à trois plans de bits).
- Rattacher cet ensemble d'affichage à l'écran qu'on vient de créer en lui indiquant de traiter
l'ensemble comme deux doubles champs de jeu.
- Servir frais avec un coulis de framboises et un Sainte-Croix du Mont.
Le programme du mois
Le programme du mois illustrera les opérations à réaliser mais avant tout, voici quelques
précisions :
L'ouverture de l'écran en 320 sur 200 ne pose pas de problèmes. Par contre, les données doivent
se trouver en mémoire Chip pour obtenir un affichage correct, comme à chaque fois que l'on
fait du graphisme (le problème ne se pose pas sur une machine à 512 ko de mémoire).
Je vous rappelle que vous pouvez forcer un exécutable à le faire avec l'utilitaire FixHunk,
ou, plus simplement, en invoquant l'option "Chip" du blink après la compilation.
Les appels à la fonction SetRGB4 fixent les couleurs à utiliser. Me souciant fort de l'intégration
des malvoyants, vous constaterez que je n'ai pas utilisé les plus discrètes.
Les plans de bits sont alloués un par un et leur adresse est stockée dans une structure BitMap.
La fonction InitBitMap initialise un BitMap (si, si, vous pouvez me croire) mais pas les
adresses des plans de bits.
Il faut ensuite initialiser le RastPort et établir les divers chaînages nécessaires. Cette
structure RastPort est primordiale car c'est par elle que passent quasiment toutes les
commandes graphiques. Toutes les fonctions de dessin (comme ici les ReetFill) reçoivent
en paramètre l'adresse du RastPort où doit se faire l'affichage.
Notez donc que comme vous avez deux zones distinctes pour l'affichage, vous devez utiliser deux
RastPorts différents : un par plan. "Ecran->RastPort" désigne le RastPort d'origine de l'écran,
c'est-à-dire celui du fond ; "rport" désigne celui que vous venez de créer : c'est le premier plan.
Il faut ensuite modifier les paramètres d'affichage de l'écran, pour lui indiquer où trouver un
deuxième champ de jeu d'une part, et lui ordonner de passer en mode double champ de jeu d'autre part.
Notez que la définition de macro PFBA permet d'arbitrer les priorités entre les deux plans.
Enfin, les fonctions MakeScreen et RethinkDisplay font appliquer toutes les modifications que
vous avez demandées mais qui n'étaient pas encore exécutées.
La cerise sur le gâteau : on dessine dans le premier plan et cela s'affiche par-dessus !
Mais si on enlève le premier plan, en faisant le chemin inverse de ce qui précède, on retrouve
le deuxième plan tel qu'il était au départ.
Je publie aujourd'hui ce listing ultra-secret pour lequel de nombreux agents étrangers ont
vainement donné leur vie :
Comme d'habitude, c'est compilé sous Lattice et ça fonctionne avec la garantie Batchman pièces
détachées mais pas main d'oeuvre, ni délacements ; faut pas pousser mémé dans les orties
(surtout si elle est en short)... Bon voilà. Batchman est fatigué, il va se coucher.
Et ce n'est pas du luxe ; si vous saviez ce qui se prépare pour le mois prochain, vous seriez
les premiers à dire que j'ai besoin de repos.
|