Forum d'entraide à la création de jeux d'aventure
 
PortailPortail  AccueilAccueil  RechercherRechercher  S'enregistrerS'enregistrer  Connexion  

 

 Le laborieux système de code couleurs AGS

Aller en bas 
AuteurMessage
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


Le laborieux système de code couleurs AGS Empty
MessageSujet: Le laborieux système de code couleurs AGS   Le laborieux système de code couleurs AGS EmptyDim 8 Mar 2020 - 2:55

Si vous utilisez les DrawingSurfaces, vous serez souvent amenés à faire appel aux fonctions GetPixel et DrawingColor, par exemple pour dessiner quelque chose en fonction d'un sprite ou du décor de votre room. Il y a néanmoins une ou deux choses à prendre en compte pour éviter de se casser les dents avec la gestion assez particulière des couleurs dans AGS.

Première chose : l'utilisation des DrawingSurface ne permet d'accéder aux couleurs qu'en 16-bits. Ainsi, lorsque vous ajustez les couleurs RVB en faisant appel à Game.GetColorFromRGB si vous passez les paramêtres 101, 102, 103, vous pouvez très bien remplacer chacune de ces valeurs par n'importe quelle nombre entre 100 et 103, vous obtiendrez le même résultat. Le code couleur renvoyé sera toujours une valeur située entre 0 et 65535. Il est donc possible que pour un jeu en 32 bits, deux pixels très légèrement différents renvoient le même code (je n'ai pas vérifié ce point précis, mais ça semblerait logique sinon cela signifierait que le jeu utilise des couleurs 16 bits). Qu'à cela ne tienne, ce sera généralement suffisant, même si c'est bien de garder en tête cette limitation.

Là où ça se corse, c'est que une couleur que vous aurez définie en utilisant DrawingColor (ou Clear) ne renverra pas toujours la même valeur quand vous voudrez la récupérer avec GetPixel plus tard ! L'aide en ligne précise :
Citation :
Dans un jeu hautes-couleurs, les 32 premiers numéros de couleur ont un sens spécial, car AGS les utilise pour maintenir la compatibilité avec les jeux 8-bits. Ainsi, si vous dessinez sur la surface en utilisant une couleur bleu de numéro 0 à 31, vous obtiendrez un numéro différent lorsque vous appellerez GetPixel

Cette précision laisse entendre que la fonction GetPixel ne renverra jamais une valeur située entre 0 et 31. or, ce n'est pas le cas ! Bon, le noir renvoie 0 dans tous les cas, ça ça peut paraître logique, mais les valeurs 1 à 31 peuvent être renvoyées aussi... pour des couleurs qui ne sont pas numérotées de 1 à 31 dans la palette !! Ainsi, si vous passez 1 comme paramètre de DrawingColor, vous obitiendrez la couleur suivante :
Le laborieux système de code couleurs AGS Sans_t10

Mais la fonction GetPixel, elle, pour la même couleur, renverra 20 ! Valeur qui, une fois utilisée pour dessiner, donnera cette couleur-ci :
Le laborieux système de code couleurs AGS Sans_t12

Fâcheux quand on essaye de concevoir des éléments graphiques automatisés... Le secret de cette usine à gaz, c'est que les valeurs 0 à 31 réservées aux couleurs 8-bits pour DrawingColor sont reléguées en fin de tableau, aux emplacements 65536 à 65567, juste après le blanc qui est normalement la dernière couleur quand vous consultez la palette "colours" de l'arborescence (il est également bon à savoir que les valeurs n suivantes seront aussi équivalentes à n - 65536). Pour s'en sortir et enfin arriver à mettre d'accord ces deux satanées fonctions, il faudra donc simplement ajouter 65536 aux couleurs inférieures à 32 renvoyées par GetPixel, de la façon suivante :
Code:
DrawingSurface* surface = Room.GetDrawingSurfaceForBackground();
int couleur = surface.GetPixel(100, 100);
if (couleur < 32) couleur += 65536; //La condition est optionnelle, comme indiqué précédemment cela devrait fonctionner également pour les valeurs supérieures à 32.
surface.DrawingColor = couleur;
surface.DrawPixel(101, 101);

Ainsi vous devriez mettre fin au quiproquos entre ces deux fonctions ne parlant pas tout-à-fait la même langue.

_________________
Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
Revenir en haut Aller en bas
 
Le laborieux système de code couleurs AGS
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Systeme de Pts de vie, vos idées...
» Système de sauvegarde...
» systeme de combat simple
» Pour ou contre le système de notations ?
» Un système de dialogue avec une limite de temps à la telltale

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Adventure Games Studio fr :: CREATION DE JEUX :: Trucs & Astuces, Tutoriaux-
Sauter vers: