La première version du niveau infini fonctionnait très bien en ligne droite, mais dès que je faisais bouger le personnage de manière plus aléatoire, il y avait toujours un moment où il tombait dans le vide. Il m’a donc fallu me pencher sur les problèmes pour les comprendre et les résoudre.
Le premier problème que j’ai remarque était en cas de demi-tour. Comme l’entrée sur une dalle se fait avant d’avoir quitté la précédente, si on fait demi-tour juste après le changement, on n’entre pas sur la dalle (vu qu’on y est encore) et on tombe dans le vide.
Après avoir tenté une solution paresseuse en changeant la forme de la zone de déclenchement pour éviter au maximum le phénomène, je me suis rendu compte que c’était du bricolage et que ça ne permettait pas de résoudre le problème totalement.
J’ai donc résolu le problème en déclenchant le changement au moment où on quitte la dalle centrale et plus au moment où on entre dans la dalle périphérique.
Mais ce n’était pas fini, j’avais encore des problèmes lors de certains déplacements. J’ai compris que cela se produisait dans les obliques lorsque le personnage entrait en contact avec trois dalles périphériques distinctes (comme on le voit dans la vidéo ci-dessous).
J’ai pu résoudre ce problèmes d’une manière relativement propre en faisant en sorte que dans le cas où le personnage est en contact avec trois dalles, le changement ne se fait pas au moment où le personnage quitte la dalle centrale, mais attend aussi qu’il en quitte un autre pour qu’il n’y en ait plus que deux, afin de savoir dans quelle direction le changement doit se faire.
Le code source se trouve sur GitHub.