Obligement - L'Amiga au maximum

Samedi 22 juillet 2017 - 12:44  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

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

 · Articles in english
 · Articles in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


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


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


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Contact

David Brunet

Courriel

 


Programmation : C - dual playfield
(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 de Amiga, par exemple.

Bien, si vous lisez toujours (même après cette intro plus que laborieuse), c'est que vous êtes vraiment intéressés par les dual playfields. 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 dual playfield ?

Un dual playfield, ça ne veut rien dire, puisque comme les Dupond, ils vont toujours par deux. Voilà pour dual. Maintenant, pour playfield (vous avez remarqué comme la difficulté est progressive ?), on peut considérer qu'il s'agit d'une scène.

L'intérêt des dual playfields 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". Le mode qui, sur Amiga, vous permet d'avoir deux plans de dessin est appelé mode "dual playfield".

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 bitplanes, il est possible de les répartir entre deux plans. Chaque plan peut donc comporter un, deux ou trois bitplanes. Vous voyez tout de suite que ça limite les possibilités au niveau des couleurs : trois bitplanes, ç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 dual playfields est la suivante :
  • Il faut avant tout ouvrir un écran, d'une profondeur d'au plus trois bitplanes.
  • Allouer ensuite de nouvelles structures d'affichage (BitMap, RastPort et de un à trois bitplanes).
  • Rattacher cet ensemble d'affichage à l'écran qu'on vient de créer en lui indiquant de traiter l'ensemble comme deux dual playfields.
  • 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 bitplanes 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 bitplanes.

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 playfield d'une part, et lui ordonner de passer en mode dual playfield 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]