Triskell Interactive » Building a rectangular isometric world

Building a rectangular isometric world

05 Nov 2018
by Noodle
Dev

Bonjour à tous !
Aujourd’hui, nous allons quitter le monde des jolis graphismes et entrer dans celui plus underground des mathématiques.

La 2D isométrique est une chose étrange. C’est de la 2D se fait passer pour de la 3D, mais elle reste toujours en deux dimensions.
De plus, personne ne l’utilise vraiment, à l’exception de personnes étranges comme nous.
Comme nous le savons, il n’existe pas de méthode standard en 2D isométrique, donc chaque fois que nous rencontrons un problème, nous devons en quelque sorte bricoler avec du code et, dans ce cas précis, nous avons dû réfléchir à une nouvelle façon d’organiser nos tiles.

Lorsque nous avons commencé à travailler sur Lethis – Path of Progress II, nous voulions des cartes de forme rectangulaire au lieu des cartes en forme de diamant du premier jeu.
En regardant la city building series, nous voulions passer de César III à Pharaon. Le silence éternel de ces espaces infinis, et noir, vous effraie ? C’est fini maintenant.

Et maintenant, c’est un petit problème parce qu’il dépend de comment nous organisons nos cases sur la carte. Vous voyez, généralement, chaque case correspond à la cellule d’un tableau, et pour simplifier le processus pour tous les non-programmeurs, nous faisons quelque chose comme ceci.


(C’est une grosse simplification excessive, mais vous voyez l’idée)
Mais nous ne voulons pas d’une forme en diamant. Nous voulons une forme rectangulaire et cette méthode particulière ne fonctionne pas.
Il a fallu un peu de temps pour trouver la bonne astuce, l’idée étant de décaler chaque ligne d’une demi-case comme ici :

Une fois que nous avons cela, nous devons trouver un moyen simple de checker les voisins de chaque case, car la plupart de notre gameplay tourne autour de ça.
Sur une carte en forme de diamant, c’est assez facile. Une tuile aura jusqu’à 8 voisins et ce sera facile de les détecter. Il suffit d’ajouter ou de soustraire 1 aux valeurs X et / ou Y.

Sauf que cela ne fonctionne pas du tout avec notre nouvelle méthode. Non seulement les valeurs sont différentes en raison de la manière dont nous avons configuré notre table, mais nous avons également deux possibilités : lorsque Y est pair et lorsque Y est impair pour toutes les tiles [x, y].

En utilisant la direction cardinale, nous obtenons quelque chose comme ceci:

Direction si Y est pair si Y est impair
Nord 0 ; -2 0 ; -2
Nord Est 0 ; -1 +1 ; -1
Est +1 ; 0 +1 ; 0
Sud Est 0 ; +1 +1 ; +1
Sud 0 ; +2 0 ; +2
Sud Ouest -1 ;  +1 0 ; +1
Ouest -1 ; 0 -1 ; 0
Nord Ouest -1 ; -1 0 ; -1

Et c’est tout, avec rien de plus que des mathématiques de base, nous avons notre carte rectangulaire et nous sommes en mesure d’avoir accès aux voisins de chaque tile. Nous avons tout ce dont nous avons besoin pour commencer à faire un jeu !
Même si cela ne ressemble pas beaucoup à l’éditeur final pour le moment…

Merci d’avoir lu !
Le moment est venu de me demander ce que j’ai mal fait et s’il existe une méthode plus simple pour réaliser ces étranges cartes rectangulaires. Sur une note plus sérieuse, si vous avez des questions sur d’autres aspects de l’isométrique, je pourrais peut-être y répondre dans un futur article de Devblog. Pour le moment, je retourne au C#.

Sinsem

 

Leave a Comment:

* - required fields

Triskell Interactive © 2024