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

Transformations

L'opération dite de transformation vous permet de changer l'emplacement où les choses sont dessinées dans le monde. Par exemple, la fonction qui dessine des blocs ne peut uniquement dessiner des blocs paralléles aux axes. En paramétrant en premier lieu une transformation de rotation, vous pourrez créer des blocs avec une orientation. De même, les sprites sont habituellement toujours affichés parallélement à un plan xy. En paramétrant une transformation, vous serez en mesure de modifier ce comportement. Il existe deux types de fonctions : les fonctions permettant de paramétrer une transformation et celles qui ajoutent des transformations.

d3d_transform_set_identity() Paramétre la transformation en lui affectant une identité (pas de transformation).
d3d_transform_set_translation(xt, yt, zt) Paramétre la transformation en lui appliquant une translation selon les vecteurs indiqués.
d3d_transform_set_scaling(xs, ys, zs) Paramétre la transformation selon une certaine échelle en utilisant les valeurs indiquées.
d3d_transform_set_rotation_x(angle) Paramétre la transformation en lui appliquant une rotation autour de l'axe des x selon la valeur indiquée.
d3d_transform_set_rotation_y(angle) Paramétre la transformation en lui appliquant une rotation autour de l'axe des y selon la valeur indiquée.
d3d_transform_set_rotation_z(angle) Paramétre la transformation en lui appliquant une rotation autour de l'axe des z selon la valeur indiquée.
d3d_transform_set_rotation_axis(xa, ya, za, angle) Paramétre la transformation en lui appliquant une rotation autour des axes indiqués selon le vecteur et la valeur indiqués.
d3d_transform_add_translation(xt, yt, zt) Ajoute une translation en utilisant le vecteur mentionné.
d3d_transform_add_scaling(xs, ys, zs) Ajoute une mise à l'échelle en utilisant les valeurs indiquées.
d3d_transform_add_rotation_x(angle) Ajoute une rotation autour de l'axe des x avec la valeur indiquée.
d3d_transform_add_rotation_y(angle) Ajoute une rotation autour de l'axe des y avec la valeur indiquée.
d3d_transform_add_rotation_z(angle) Ajoute une rotation autour de l'axe des z avec la valeur indiquée.
d3d_transform_add_rotation_axis(xa, ya, za, angle) Ajoute une rotation autour des axes indiqués selon le vecteur et la valeur indiqués.
Veuillez comprendre que la rotation et la mise à l'échelle se font dans le respect de l'origine du monde, et non pas en fonction de l'objet devant être dessiné. Si l'objet ne se trouve pas à l'origine, il sera également déplacé à un autre endroit, ce qui ne sera pas forcément ce que vous voudrez réaliser. Aussi, pour effectuer une rotation d'un objet selon son propre axe des x, nous devons en premier lieu lui effectuer une translation selon l'origine, puis lui appliquer une rotation pour enfin lui faire une translation une nouvelle fois selon sa position. C'est pourquoi il existe des fonctions pour ajouter des transformations.

Les exemples suivants devraient mieux vous faire comprendre ce mécanisme. Supposons que nous avons un sprite spr que nous voulons afficher à la position (100,100,10). Nous pouvons utiliser le code suivant :

{
  d3d_transform_set_translation(100,100,10);
  draw_sprite(spr,0,0,0);
  d3d_transform_set_identity();
}

Veuillez noter que dû au fait que nous employons une translation, nous devons maintenant afficher le sprite à la position (0,0) (ceci suppose que l'instance courante présente une profondeur de 0 ! Si vous n'en êtes pas sûr, régler en premier lieu la profondeur). Si nous utilisons cela dans notre jeu de shoot à la première personne, nous ne verrons pas le sprite. La raison est que le sprite est toujours affiché parallèlement au plan des xy. Nous voulons lui appliquer une rotation de 90 degrés le long de l'axe des x (ou de l'axe des y). Aussi, nous devrons ajouter une rotation. Souvenez-vous de l'ordre : nous devons en premier lieu effectuer une rotation du sprite puis lui appliquer une translation. Ainsi, nous utiliserons le code suivant.

{
  d3d_transform_set_identity();
  d3d_transform_add_rotation_x(90);
  d3d_transform_add_translation(100,100,10);
  draw_sprite(spr,0,0,0);
  d3d_transform_set_identity();
}

Parfois, vous désirerez temporairement sauvegarder la transformation actuelle, par exemple pour ajouter une transformation supplémentaire puis restaurer l'ancienne transformation (cela arrive souvent lorsque l'on dessine des modéles hiérarchiques). Pour arriver à ce but, vous pouvez pousser la transformation courante sur la pile pour ultérieurement la retirer de cette dernière afin de l'utiliser ensuite comme transformation courante. Il existe pour cela les fonctions suivantes :

d3d_transform_stack_clear() Efface la pile des transformations.
d3d_transform_stack_empty() Indique si la pile des transformations est vide.
d3d_transform_stack_push() Pousse (push) la transformation courante sur la pile. Indique en retour s'il y avait une room sur la pile pour la pousser à cet emplacement (si vous omettez d'effectuer un pop de la transformation, vous obtiendrez à un certain moment un message "out of room on the stack").
d3d_transform_stack_pop() Dépile la transformation du haut de la pile et la désigne comme transformation courante. Indique en retour s'il y avait une transformation sur la pile.
d3d_transform_stack_top() Désigne la transformation située en haut de pile comme la transformation courante mais ne l'enlève pas de la pile. Indique en retour s'il y avait une transformation sur la pile.
d3d_transform_stack_discard() Supprime la transformation du haut de la pile sans la désigner comme transformation courante. Indique en retour s'il y avait une transformation sur la pile.

L'utilisation de transformation constitue un mécanisme puissant. Mais il convient d'être prudent et de toujours replacer la transformation à une identité dès que vous en avez terminé.












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