Obligement - L'Amiga au maximum

Samedi 20 avril 2024 - 10:09  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in english


Réseaux sociaux

Suivez-nous sur X




Liste des jeux Amiga

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


Trucs et astuces

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


Glossaire

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


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


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 :

C
C

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.


[Retour en haut] / [Retour aux articles]