Vu l'intérêt qu'il y a eu à propos de mon implémentation de la gravité dans AirScape, j'ai décidé d'écrire mon premier tutoriel sur le sujet pour vous montrer les différentes étapes et leur simplicité .
Premièrement, cette méthode vient de Yann Granjon. Je n'en ai pas eu l'idée, je l'ai simplement implémenté. Il a beaucoup aidé tout au long de la création du jeu et cela n'aurait pas été pareil sans lui.
Les bases
La chose la plus importante à prendre en compte pour ce projet, est la possibilité de changer l'angle de la gravité du behavior Platform. Une fois qu'on sait ça, il faut se demander "comment le jeu va savoir quelle direction de gravité affecter en chaque endroit?"
J'ai donc implémenté, en suivant l'idée de Yann, les zones de gravité.
(Désolé pour les images floues, la perte de qualité est due à l'upload)
Vous pouvez voir l'aperçu du niveau 1-1. Ici, on doit s'intéresser aux zones colorées entourant le décors.
Ces formes sont toutes des éléments d'un même objet, "gravzone". Il y en a 5 et ont toutes un usage différent.
Il y a 2 types de gravzone, "Relative" et "Non-Relative", déterminé par un booléen.
Le code
Le code est très simple. En voici les bases:
Nous avons donc un angle pour chaque gravzone. Cet angle est déterminé en fonction de la valeur du booléen Relative.
Généralement, les gravzones arrondies sont relatives, et les gravzones rectilignes non.
La différence est que les gravzones relatives attirent vers un seul point, ce qui permet des surfaces arrondies, alors que les rectilignes attirent dans une direction spécifique (déterminé par l'angle de la gravzone.)
Bref, retour au code. Pour chaque gravzone chevauchée par le joueur, on détermine l'angle (défini par gravzone.a pour une non-relative ou angle(player.x,player.y,gravzone.x,gravzone.y) pour une relative) et on transforme ensuite cet angle en 2 vecteurs. On le fait pour que les vecteurs puissent être AJOUTES aux vecteurs précédents, pour obtenir finalement un vecteur pointant vers la direction moyenne des angles spécifiés par toutes les gravzones chevauchées par le joueur au même moment.
C'est comme ça que je peux chevaucher 2 gravzones ou plus et être attiré dans la direction de la moyenne de leurs angles.
Changement d'orientation
On rencontre un petit problème quand on bascule de 180 degrés. La moyenne des angles est nulle et le joueur tombe dans une direction bizarre. J'ai donc ajouté un autre objet invisible, le flip_assist.
On neutralise donc le comportement classique de la gravité pendant que le joueur chevauche un flip_assist.
Ce code bascule l'angle de gravité de la valeur standard à celle modifiée par le flip_assist, puis retourne à sa valeur de base quand le joueur n'en chevauche plus un.
Il y a en fait 2 flip_assists par barre jaune,pour que le joueur puisse basculer dans un sens ou dans l'autre. Il faut donc un booléen "cannot_reset_flip" pour que le jeu ne s'embrouille pas.
Et c'est à peu près tout. Avec un peu de anglelerp pour lisser les rotations:
On a donc les mécaniques de base du jeu.
Voici quelques exemples de niveaux pour se faire une meilleure idée:
J'espère que vous avez aimé ce tutoriel. Et surtout prévenez-moi si j'ai oublié quelque chose.