Accueil | Personnaliser | Blog | Extras | Log In | Information
Manuel | D&D icons | GML Parser | Archives | Ville Iso
Username: Password:  
à propos | Caractéristiques | Directory | Bannières | Contacter

Création de jeux avec Game Maker
Création de jeux avec Game Maker

Fonctions de Dessin Avancées

Ces fonctionnalités ne sont disponibles que dans la version enregistrée de Game Maker.

Nous avons vu et décrit précédemment un certain nombre de fonctions de base concernant l'affichage. Vous trouverez ici des fonctions supplémentaires qui vous offriront encore davantage de possibilités. En premier lieu, nous trouvons les fonctions pour afficher des formes (shapes) avec des couleurs en arc-en-ciel. En second lieu, nous détaillerons les fonctions permettant d'afficher des polygones plus généraux puis enfin, nous parlerons de la possibilité d'afficher des textures projetées sur des polygones.

Il existe les versions évoluées suivantes venant compléter les fonctions de base pour l'affichage. Chacune d'entre elles présente des paramétres supplémentaires concernant la couleur utilisée afin de déterminer la couleur des différents vertices. La couleur standard d'affichage n'est pas utilisée par ces fonctions.

draw_point_color(x, y, col1) Affiche un point à la position (x,y) dans la couleur indiquée col1.
draw_line_color(x1, y1, x2, y2, col1, col2) Affiche une ligne de la position (x1,y1) à la position (x2,y2), avec interpolation de la couleur de col1 à col2.
draw_rectangle_color(x1, y1, x2, y2, col1, col2, col3, col4, outline) Affiche un rectangle. Les quatre couleurs représentent les couleurs des vertex supérieur gauche, supérieur droit, inférieur droit et inférieur gauche. outline précise si seule la bordure doit être dessinée (true) ou si le rectangle doit être plein (false).
draw_roundrect_color(x1, y1, x2, y2, col1, col2, outline) Affiche un rectangle à bords arrondis. col1 est la couleur du centre et col2 celle du bord. outline indique si seule la bordure doit être affichée (true) ou si le rectangle doit être plein (false).
draw_triangle_color(x1, y1, x2, y2, x3, y3, col1, col2, col3, outline) Affiche un triangle. Les trois couleurs correspondent aux couleurs des trois vertices, couleurs qui seront interpolées dans le triangle. outline indique si seule la bordure doit être affichée (true) ou si le triangle doit être plein (false).
draw_circle_color(x, y, r, col1, col2, outline) Dessine un cercle à la position (x,y) et de rayon r. col1 représente la couleur du centre et col2 celle des bords. outline indique si seule la bordure doit être affichée (true) ou si le cercle doit être plein (false).
draw_ellipse_color(x1, y1, x2, y2, col1, col2, outline) Dessine une ellipse. col1 est la couleur au centre et col2 la couleur du bord. outline indique si seule la bordure doit être affichée (true) ou si l'ellipse doit être pleine (false).

Vous avez également la possibilité de dessiner de plus grandes primitives. Le fonctionnement est quelques peu différent. Vous commencerez à spécifier la primitive que vous souhaitez afficher. Ensuite, vous indiquerez les vertices (sommets) de la primitive puis enfin, vous terminerez la primitive qui sera ensuite affichée. Six types de primitives existent :

pr_pointlist Les vertices sont formés d'un jeu de points.
pr_linelist Les vertices sont un jeu de segments de ligne. Chaque paire de vertices forme un segment de ligne. Ainsi, il doit y avoir un jeu pair de vertices.
pr_linestrip Les vertices forment un ensemble de lignes dont la première est reliée à la seconde, la deuxième reliée à la troisième, etc. La dernière ligne ne sera pas reliée à la première. Vous devrez indiquer une copie supplémentaire du premier vertex.
pr_trianglelist Les vertices sont un ensemble de triangles. Chaque triplet de sommets forme un triangle. Ainsi, le nombre de vertices doit donc être un multiple de 3.
pr_trianglestrip Les vertices forment à nouveau des triangles mais cette fois, cela fonctionne un peu différemment. Les trois premiers sommets forment un triangle. Les deux derniers vertices, en même temps que le prochain sommet, forme le second triangle, etc. Aussi, chaque nouveau vertex indique un nouveau triangle, relié au précédent.
pr_trianglefan Similaire à une liste de triangle mais cette fois, le premier vertex fait partie de tous les triangles. A nouveau, chaque nouveau vertex infique un nouveau triangle, relié au précédent vertex et au premier vertex.

Les fonctions suivantes existent pour les primitives de dessin.

draw_primitive_begin(kind) Débute une primitive du type indiqué.
draw_vertex(x, y) Ajoute le vertex (x,y) à la primitive, en utilisant la couleur et la valeur alpha définies précédemment.
draw_vertex_color(x, y, col, alpha) Ajoute le vertex (x,y) à la primitive, avec sa propre couleur et valeur alpha. Cela vous permet de créer des primitives avec des changements progressifs des valeurs de couleur et alpha.
draw_primitive_end() Termine la description de la primitive. Cette fonction dessine la primitive.

Il est enfin possible de dessiner des primitives en utilisant des sprites ou des arrière-plans comme textures. Lors de l'utilisation de texture, l'image est placée sur la primitive avec redimensionnement afin que cette dernière remplisse entièrement la primitive. Les textures sont utilisées pour ajouter des détails aux primitives, ex: un mur de briques. Pour utiliser des textures, vous devrez en premier lieu obtenir l'ID de la texture que vous souhaitez utiliser. Pour réaliser cela, utilisez les fonctions suivantes :

sprite_get_texture(spr, subimg) Retourne l'ID de la texture correspondant à la sous-image subimg du sprite mentionné.
background_get_texture(back) Retourne l'ID de la texture correspondant à l'arrière-plan indiqué.

La texture choisie peut ne pas être actuellement en mémoire vidéo. Le système la chargera alors pour vous en cas de besoin mais parfois, vous souhaiterez le faire par vous-même. Pour cela, il existe les fonctions suivantes :

texture_preload(texid) Charge immédiatement la texture en mémoire vidéo.
texture_set_priority(texid, prio) S'il y a trop peu de mémoire vidéo, certaines textures seront temporairement retirées de la mémoire afin de libérer de la place pour permettre le chargement des textures nécessaires. Les textures de priorité la plus basse seront supprimées en premier lieu. Par défaut, toutes les textures possédent la priorité 0 mais il vous est possible de changer cette priorité à l'aide de cette commande (n'utilisez que des valeurs positives !)

Pour ajouter des textures à des primitives, vous devrez indiquer quelles parties des textures et à quel endroit ces dernières doivent être placées sur la primitive. Les positions de la texture sont indiquées avec des valeurs entre 0 et 1 mais cela peut poser problème. En effet, la taille des textures doit être une puissance de 2 (soit par exemple 32x32 ou 64x64). Si vous souhaitez utiliser des sprites ou des arrière-plans en guise de textures, il sera préférable de vérifier auparavant qu'ils possédent cette taille. Sinon, cela ne marchera pas. Pour déterminer quelle partie de la texture est actuellement utilisée, vous pourrez utiliser les deux fonctions suivantes. Elles retournent une valeur entre 0 et 1 qui indique la largeur ou la hauteur de l'actuelle partie de la texture en cours d'utilisation. En précisant cette valeur comme coordonnée de texture, cela indiquera le côté droit ou inférieur de la texture.

texture_get_width(texid) Retourne la largeur de la texture correspondant à l'ID indiqué. La largeur doit être comprise entre 0 et 1.
texture_get_height(texid) Retourne la hauteur de la texture correspondant à l'ID mentionné. La hauteur doit être comprise entre 0 et 1.

Vous utiliserez les fonctions suivantes pour dessiner des primitives texturées :

draw_primitive_begin_texture(kind, texid) Débute une primitive de type indiqué et avec la texture mentionnée.
draw_vertex_texture(x, y, xtex, ytex) Ajoute un vertex (x,y) à la primitive et à la position (xtex,ytex) de la texture, avec mélange de couleur en utilisant la couleur et la valeur alpha choisies auparavant. xtex et ytex doivent normalement être compris entre 0 et 1 mais de plus grandes valeurs peuvent être employées, permettant ainsi une répétition de la texture (voir ci-dessous).
draw_vertex_texture_color(x, y, xtex, ytex, col, alpha) Ajoute un vertex (x,y) à la primitive à la position (xtex,ytex) de la texture, avec mélange de couleur en utilisant sa propre couleur et valeur alpha.
draw_primitive_end() Termine la description de la primitive. Cette fonction affichera la primitive.

Il y a trois fonctions influençant la manière dont les textures sont affichées :

texture_set_interpolation(linear) Indique si l'on doit utiliser une interpolation linéaire (true) ou au contraire utiliser le point le plus proche (false). Une interpolation linéaire donnera des textures plus douces mais pourra aussi donner des résultats légérement plus troubles. De plus, cela prendra parfois plus de temps pour les afficher. Ce réglage influencera également l'affichage des sprites et des arrière-plans. La valeur par défaut est false (cette valeur peut être changée via les paramétres généraux de jeu).
texture_set_blending(blend) Indique si l'on doit utiliser la fonction de mélange de couleurs avec les valeurs de couleurs et alphas. En positionnant ce switch à 0 (OFF), cela peut rendre plus rapide l'exécution du jeu sur de vieilles machines dont le hardware est un peu dépassé. Ce réglage influence aussi l'affichage des sprites et des arrière-plans. La valeur par défaut est true.
texture_set_repeat(repeat) Indique si l'on doit répéter la texture. Ceci fonctionne de la manière suivante. Comme indiqué précédemment, les coordonnées de texture doivent être comprises entre 0 et 1. Si une plus grande valeur que 1 est mentionnée, le reste ne sera pas par défaut dessiné. En réglant la valeur repeat à true, la texture sera répétée. Notez que les sprites et les arrière-plans sont toujours affichés sans possibilité de répétition. Aussi, une fois que vous avez affiché un sprite d'un arrière-plan donné, cette valeur sera remise à false.

Il existe deux autres fonctions qui seront utiles pas uniquement pour dessiner des textures. Habituellement, les primitives sont mélangées à l'aide d'un fondu avec l'arrière-plan en utilisant la valeur alpha. Il vous est possible de préciser la manière dont cela doit se produire. En plus du mode normal, il est possible d'indiquer que la nouvelle couleur doit être ajoutée à celle existante ou encore soustraite de la couleur existante. Cela peut être utilisé pour créer par exemple des spots de lumière ou encore des ombres. Il est également possible de faire en sorte de prendre en compte au maximum la nouvelle couleur ou celle déjà existante. Cela permet d'éviter le phénomène d'effets de saturation qui survient lors de l'ajout de couleurs. Veuillez noter qu'a la fois les fonctions de soustraction et de maximilisation ne prennent pas pleinement en compte la valeur alpha (DirectX ne le permettant pas). Il est donc préférable de s'assurer que la zone en dehors soit noire. Il y a pour cela deux fonctions. La première vous donnera seulement quatre options qui ont déjà été décrites. La seconde fonction vous proposera davantage de possibilités. Il vous sera nécessaire d'expérimenter par vous-même en utilisant les différents paramétres. Si vous parvenez à bien utiliser ces fonctions, vous arriverez à créer par exemple des explosions intéressantes ou encore des effets de halo spectaculaires.

draw_set_blend_mode(mode) Indique si le mode de mélange de couleurs doit être utilisé. Les valeurs suivantes sont disponibles : bm_normal, bm_add, bm_subtract et bm_max. N'oubliez pas de remettre le mode à la valeur normal après utilisation de cette fonction car sinon, les autres sprites et même les arrière-plans seront affichés avec le nouveau mode de mélange de couleurs.
draw_set_blend_mode_ext(src, dest) Indique quel mode de mélange de couleurs est à utiliser pour à la fois la couleur source et celle de destination. La nouvelle couleur est pendant quelques temps fonction de la source et à d'autres moments fonction de la destination. Les facteurs de temps pourront être paramétrés avec cette fonction. Pour bien comprendre comment cela marche, la source et la destination ont à la fois un composant rouge, vert, bleu et alpha. Ainsi, la source est (Rs, Gs, Bs, As) et la destination est (Rd, Gd, Bd, Ad). Tous devront être dans la fourchette allant de 0 à 1. Les facteurs de mélange de couleurs que vous pouvez choisir pour la source et la destination sont les suivants :
  • bm_zero: Le facteur de mélange sera de (0, 0, 0, 0).
  • bm_one: Le facteur de mélange sera de (1, 1, 1, 1).
  • bm_src_color: Le facteur de mélange sera de (Rs, Gs, Bs, As).
  • bm_inv_src_color: Le facteur de mélange sera de (1–Rs, 1–Gs, 1–Bs, 1–As).
  • bm_src_alpha: Le facteur de mélange sera de (As, As, As, As).
  • bm_inv_src_alpha: Le facteur de mélange sera de (1–As, 1–As, 1–As, 1–As).
  • bm_dest_alpha: Le facteur de mélange sera de (Ad, Ad, Ad, Ad).
  • bm_inv_dest_alpha: Le facteur de mélange sera de (1–Ad, 1–Ad, 1–Ad, 1–Ad).
  • bm_dest_color: Le facteur de mélange sera de (Rd, Gd, Bd, Ad).
  • bm_inv_dest_color: Le facteur de mélange sera de (1–Rd, 1–Gd, 1–Bd, 1–Ad).
  • bm_src_alpha_sat: Le facteur de mélange sera de (f, f, f, 1); f = min(As, 1–Ad).
Par exemple, le mode normal de mélange de couleurs régle le mélange de couleurs de la source à bm_src_alpha et celui de la destination à bm_inv_src_alpha. N'oubliez pas de remettre le mode à la valeur normal après l'avoir utilisé car sinon, les autres sprites et même les arrière-plans seront affichés avec le nouveau mode de mélange de couleurs.

L'affichage de primitives à base de textures demande un peu de travail de votre part mais offre en contre-partie de grands résultats. Vous pourrez même les utiliser pour faire des jeux en 3D.




















<< Traduction française par Philippe Ragni - (2005) >>

Search Search


Alternative versions Alternative versions

You can also read this manual on one single long page (± 1.5 mb)

Also available in: Dutch English German

ZIP Download helpfile

Annonces Annonces

GameMaker Manual