Adventure Games Studio fr
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.


Forum d'entraide à la création de jeux d'aventure
 
PortailAccueilRechercherS'enregistrerConnexion
Le Deal du moment : -23%
Climatiseur réversible mobile BEKO BX112H (3400 ...
Voir le deal
499.99 €

 

 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 : 1721

Age : 31

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.

_________________
"Je ne suis point cet assemblage de membres que l’on appelle le corps humain ; je ne suis point un air délié et pénétrant répandu dans tous ces membres ; je ne suis point un vent, un souffle, une vapeur, ni rien de tout ce que je puis feindre et m’imaginer, puisque j’ai supposé que tout cela n’était rien, et que, sans changer cette supposition, je trouve que je ne laisse pas d’être certain que je suis quelque chose."

René Descartes
Revenir en haut Aller en bas
 
Le laborieux système de code couleurs AGS
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Topic fashion : choisir ses couleurs
» code couleur
» Les Blasons: signification des couleurs et des figures
» Ex illis une autre facon de jouer aux figurines
» Couleurs bizarres sur mon Nabaztag:tag

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: