14 : Icônes et blocs écran

Les icônes signifient quelque chose de différent dans AMOS par rapport à ce qu'elles représentent dans le monde réel, par exemple sous AmigaDOS. Dans le vaste monde de l'informatique, elles sont généralement une représentation picturale de quelque chose, par exemple une image de disque sur le Workbench qui permet de manipuler les fichiers graphiquement avec la souris plutôt que textuellement en tapant des commandes. Le concept d'icône provient de recherches menées au Xerox Palo Alto Research Center aux États-Unis, et plus tard utilisé par Apple Computer Inc dans sa gamme Macintosh, dans le cadre du système WIMP (Windows, Icons, Mouse and Pointer). Bien entendu, le système WIMP est aussi utilisé par l'Amiga sous la forme du Workbench, mais ce n'est pas ce dont il s'agit avec les icônes d'AMOS.

Les icônes dans AMOS sont des morceaux de graphismes de fond, qui peuvent être stockés dans une banque mémoire comme n'importe quel autre type de Sprite, Bob, son, musique ou écran graphique. Une fois stockés, ils peuvent être collés à l'écran dans n'importe quel ordre pour composer des arrière-plans personnalisés qui, parce qu'ils sont constitués de petites portions répétées, prennent moins de temps et de mémoire que de stocker et d'afficher des écrans entiers à chaque fois que vous voulez un nouvel arrière-plan. C'est comme carreler une salle de bain avec des carreaux décorés, chaque carreau est le même et très petit, mais en les mettant ensemble, on couvre une grande surface avec un motif intéressant.

Carrelage pour débutants

La plupart des jeux consistent en de nombreux écrans différents, et comme je l'ai dit plus haut, si ceux-ci étaient tous de taille complète au format IFF, votre jeu d'arcade moyen ferait environ 3 Mo. Donc, la solution simple consiste à créer de petits graphismes carrés, appelés « tiles » dans le métier, et à les coller sur l'écran. Supposons que vous avez un graphique de mur. La plupart des tiles sont identiques, à l'exception de celui avec une applique, un peu de mousse ou une porte. Cela signifie que vous pouvez construire tout le mur à partir de seulement cinq tiles, les répétant encore et encore au fur et à mesure.

Les icônes sont imprimées à l'écran en mode remplacement, donc tout ce qui se trouve à l'écran sera effacé par le nouveau graphique. Cela diffère des modes pour Sprites et Bobs qui n'ont pas d'effet apparent sur l'arrière-plan. Les Sprites et Bobs flotteront cependant au-dessus des arrière-plans construits avec des icônes aussi aisément qu'ils le feraient sur un graphisme complet au format IFF.

Icônes à gogo !

Quelqu'un fait-il encore des blagues à base de « Giz A job » ? Je ne pense pas. Quoi qu'il en soit, les icônes sont notre sujet, alors allons-y. Les icônes, comme je l'ai déjà dit, sont un moyen plus permanent de stocker des arrière-plans sous forme de banques mémoire remplies de petites portions ou tiles de graphismes, et c'est la méthode la plus efficace en mémoire pour créer des arrière-plans.

Vous pouvez obtenir une tile d'icône à partir d'un fichier IFF, comme pour les Bobs ou les blocs (voir la section Blocs ci-dessous), mais la meilleure façon est de créer vos tiles d'icônes dans un éditeur quelconque et de les enregistrer sous forme de banque. Vous pouvez les créer dans SpriteX ou un programme de Bob similaire, et si l'éditeur ne sauvegarde pas au format icône, vous pouvez toujours passer la banque de Bob résultante dans un programme comme ICON_CONV.AMOS de Shadow Software.

Pour vous éviter la peine si vous ne trouvez pas de programme pour le faire, voici comment écrire votre propre simple sélecteur d'icône :

Rem * Icon Grabber.AMOS *
Rem
Flash Off : Cls 0
Shared N,X,Y,X1,X2,Y1,Y2
N=1
Dir$="df0:"
F$=Fsel$("*.iff","","Pick an IFF file")
Load Iff F$,0
Do
X=X Mouse : Y=Y Mouse
If Mouse Click=%1 Then BEGIN
If Mouse Click=%10 Then FINISH
X$=Inkey$
If X$="a" Then SAVIT
Loop

Procedure BEGIN
X1=X Screen(0,X) : Y1=Y Screen(0,Y)
Shoot
End Proc

Procedure FINISH
X2=X Screen(0,X) : Y2=Y Screen(0,Y)
GRAB
End Proc

Procedure GRAB
Get Icon N,X1,Y1 To X2,Y2
Bell
Inc N
End Proc

Procedure SAVIT
F$=Fsel$("*.abk","","Save your icon bank")
Save F$,2
End Proc

Un peu rudimentaire, mais cela vous donne une idée de ce que vous visez. Je l'ai réduit à sa plus simple expression pour que vous puissiez comprendre ce qui se passe.

D'abord la mise en place habituelle, plus un petit appel à une fenêtre de sélection de fichier pour charger une image. Cette image devrait contenir des motifs de fond que vous souhaitez capturer, et être au format IFF d'un programme comme DPaint 4 (Electronic Arts). Pour capturer une icône en utilisant ce programme, vous appuyez sur le bouton gauche dans le coin supérieur gauche de l'icône, puis sur le bouton droit dans le coin inférieur droit. Le clic gauche est confirmé par un son Shoot, et le clic droit par une sonnerie Bell. Le rectangle désigné est ensuite capturé en tant qu'icône dans la banque 2. Le numéro de l'icône est donné par la variable N, et celle-ci est incrémentée à chaque fois pour placer l'icône dans le slot suivant de la banque.

Enfin, lorsque vous êtes prêt à enregistrer la banque d'icônes, appuyez sur la touche a, et la fenêtre de sauvegarde apparaîtra, vous permettant d'enregistrer la banque sur disque sous n'importe quel nom de fichier.

Comme je l'ai dit, ce n'est pas le programme le plus performant ni le plus efficace, mais c'est ainsi que cela se fait. Prenez cette base et ajoutez-y ce que vous voulez, en testant les bugs au fur et à mesure, et vous serez bien parti pour produire votre propre sélecteur d'icônes.

Si taper tout ce code vous déplaît, ou si vous voulez simplement quelque chose de plus puissant, essayez SpriteX 2 (voir les détails au chapitre 10) pour une production sans effort de Sprites, Bobs et Icônes.

Blocs écran — Blocks Away!

En plus des icônes, le système AMOS vous propose un système appelé Screen Blocks, et ceux-ci sont très similaires aux icônes (presque identiques), sauf qu'ils ne sont que des mesures temporaires. Les blocs que vous créez ne sont pas enregistrés avec votre programme et ne peuvent pas être sauvegardés dans une banque mémoire. Il n'y a d'ailleurs pas vraiment besoin de les sauvegarder, puisqu'ils sont capturés depuis l'écran, et que vous avez probablement déjà l'écran d'origine, n'est-ce pas ?

Ce programme montre comment capturer un bloc écran et le déplacer :

Rem * Screen Blocks.AMOS *
Rem * charger une image quelconque *
Rem
Load Iff "load your picture choice here.iff",0
For X=0 To 7
  For Y=0 To 9
    Get Block X*10+Y+1,X*32,Y*20,32,20
  Next Y
Next X
Do
  Put Block Rnd(48)+1,Rnd(Screen Width)+1,Rnd(Screen Height)+1
Loop

Évidemment, une fois que vous êtes certain que la commande capture la bonne zone de l'écran pour le bloc, vous pouvez le faire sous l'écran principal (dans l'écran 1 ou autre), afin que l'utilisateur ne voie pas la capture. Cela fait désordre si l'utilisateur voit ce genre de choses. Tout devrait se produire en coulisses et l'utilisateur ne devrait voir que ce qu'il est censé voir.

Alerte à bloc

Les blocs ne servent pas uniquement pour les arrière-plans de jeux. Vous pouvez aussi les utiliser pour produire des effets plus techniques. Prenez cet exemple de boîte d'alerte. Le bloc recouvrant le texte ne le détruira pas, regardez plutôt :

Rem * CBlock Alert.AMOS *
Rem
Paper 7 : Flash Off : Curs Off : Cls
Locate 0,10 : Centre "Remarquez que ce texte sera toujours là..."
BOCKSALERT
Wait Key

Procedure BOCKSALERT
W=160 : H=100 : X=80 : Y=50
Get Cblock 1,X,Y,W+16,H+16
Paper 0 : Pen 2
Ink 0 : Bar X+5,Y+5 To X+W+5,Y+H+5
Ink 0 : Bar X,Y To X+W,Y+H
Ink 2 : Box X+1,Y+1 To X+W-1,Y+H-1
Locate X Text(X),Y Text(Y)+2 : Centre "Sous la boîte"
Locate X Text(X+W/2)-3,Y Text(Y+H)-4
XB=X Graphic(X Curs)-7 : YB=Y Graphic(Y Curs)-7
Print Border$("Ouais !",2)
Reserve Zone 1
Set Zone 1,XB,YB To X Graphic(X Curs)+7,Y Graphic(Y Curs)+15
While O=0
  While Mouse Key=0 : Wend
  Z=Mouse Zone
  If Z=1
    Paper 2 : Pen 0
    Locate X Text(X+W/2)-3,Y Text(Y+H)-4
    Print Border$("Parfait",2)
    Pen 0 : Paper 2
    Play 30,40 : O=1
  End If
Wend
Put Cblock 1,X,Y
End Proc

Lorsque vous cliquez sur la zone de clic, qui est entièrement une construction AMOS plutôt qu'une boîte d'alerte automatique, celle-ci disparaît, laissant le texte en dessous intact. Notez l'utilisation astucieuse de CBlock pour s'assurer que le texte reste intact ou du moins soit restauré. Beaucoup d'autres effets subtils peuvent être réalisés de cette manière avec un peu d'ingéniosité. Il suffit de penser à toute zone de l'écran que vous pourriez vouloir stocker et restaurer, et vous comprendrez le principe.

Get Block / Put Block

Ce programme fait un petit tour malin avec une zone de l'écran. L'effet n'est pas sans rappeler un effet numérique de télévision, où une image est déplacée sur l'écran. Vous pouvez en fait faire mieux que cela si vous chargez un autre écran sous celui en cours, déformez l'écran supérieur avec un bloc provenant de cet écran, puis faites apparaître par segments l'écran caché sur l'écran supérieur et placez-les.

Rem * Get Block Put Block.AMOS *
Rem
Load Iff "any iff picture",0
Get Block 1,10,10,110,100
Double Buffer
Wait Key
For X=0 To 320 Step 16
  Put Block 1,X,Y
  Put Block 1,Y,X
  Screen Swap : Wait Vbl
Next

Le bloc est d'abord capturé à partir de l'écran que vous avez chargé, puis il est estampillé à l'aide de la boucle For Next sur la page, en inversant les variables X et Y pour permuter les coordonnées X et Y des emplacements où les blocs sont placés sur l'écran. Désordonné mais amusant.

Blocage avancé

Si vous souhaitez faire plus avec les icônes et les blocs, vous devrez soit écrire votre propre programme d'icônes, ce qui n'est pas la solution idéale, soit acheter une extension pour AMOS appelée AMOS TOME. C'est l'une des meilleures façons de concevoir et d'utiliser des icônes, vous auriez donc tout intérêt à y jeter un coup d'œil.

Vous voulez en savoir plus ? Tournez la page.

← Retour au sommaire