Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Création d'un monde isométrique  (Lu 4028 fois)

0 Membres et 1 Invité sur ce sujet

Auronake

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
    • E-mail
Création d'un monde isométrique
« le: Mai 17, 2013, 01:56:29 pm »
Bonjour à tous !

Ma/mes question(s) ne sont, en parties, pas liées à la SFML mais quand même on sait jamais :).

Pourrez-vous m'éclairer ? :)

Je souhaite réaliser un jeu en vue isométrique.
Je suis capable d'afficher des tiles fait en carrés en losange à l'affichage et bien positionnés les uns avec les autres (45° puis hauteur divisée par deux) mais le rendu n'est super super. Bref

Je me demande comment vous, vous réalisez vos maps iso ?

Dois-je partir sur des tiles directement faits en losange (contenu dans un rectangle transparent) et du coup ne pas me préoccuper de la rotation de 45° mais seulement du placement en losange ?
Seulement dans ce cas, il me parait peut-être difficile de détecter quel losange est survolé par la souris (Highlight) car il faudrait, par les coordonnées de la souris, détecter quel losange est survolé, et non le rectangle le contenant et appliquer le highlight autour du losange lui-même...

Dois-je partir sur des tiles carrés mais en imaginant qu'ils seront en fait basculer en losange (Du coup on les dessine sur le côté directement) ?
Ceci permettrait de réaliser une grille classique cartésienne puis de gérer uniquement à l'affichage la bascule et le positionnement des tiles...

Après techniquement, j'utilise la SFML2.
Avec, je travaille directement avec un tableau de vertex du coup, je peux placer mes points directement comme je veux ainsi que les textures, c'est à dire que je ne crée pas une map avec des carrés que je fais pivoter, je place directement mes points de tel sorte à avoir une rotation et un positionnement correct.

Est-ce que vous auriez des retours d'expériences sur tout cela ? :)

Bonne journée et merci d'avance !

Cpl.Bator

  • Hero Member
  • *****
  • Messages: 540
    • Voir le profil
Re : Création d'un monde isométrique
« Réponse #1 le: Mai 17, 2013, 04:25:53 pm »
les images qui compose ta carte sont déjà "tourné" , en isométrique donc , le placement des tuiles ce fait suivant cette formule toute bête :

iso_x = x - y
iso_y = (x+y) / 2

pour la souris , utilise la même formule que le placement de tes tuiles.
pour un gain de performance , utilise les vertex array de la sfml.

Auronake

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
    • E-mail
Re : Re : Création d'un monde isométrique
« Réponse #2 le: Mai 17, 2013, 05:01:18 pm »
les images qui compose ta carte sont déjà "tourné" , en isométrique donc , le placement des tuiles ce fait suivant cette formule toute bête :

iso_x = x - y
iso_y = (x+y) / 2

pour la souris , utilise la même formule que le placement de tes tuiles.

Ok, donc on les dessines d'abord (Photoshop, paint, autre) en losange puis on les place avec la formule. Oki doki.

pour un gain de performance , utilise les vertex array de la sfml.

Oui, c'est déjà ce que je fais.

Je te remercie.

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : Création d'un monde isométrique
« Réponse #3 le: Mai 28, 2013, 08:31:18 pm »
Citer
Dois-je partir sur des tiles directement faits en losange (contenu dans un rectangle transparent) et du coup ne pas me préoccuper de la rotation de 45° mais seulement du placement en losange ?
Seulement dans ce cas, il me parait peut-être difficile de détecter quel losange est survolé par la souris (Highlight) car il faudrait, par les coordonnées de la souris, détecter quel losange est survolé, et non le rectangle le contenant et appliquer le highlight autour du losange lui-même...

Ou bien tu peux simplement utiliser une matrice de passage.
Là tu peux avoir carrément le losange pointé par la souris dans le répère iso :
    Matrix2f chBase (0.5f, -1.f, 0.25f, 0.5f);
    Vec2f f = chBase.inverse() * point;
    f.x = (int)  f.x / 100 * 100;
    f.y = (int)  f.y / 50 * 50;   

Avec cette formule, je récupère les coordonnées en iso du sommet le plus haut du losange à l'endroit ou j'ai cliqué.
100 et 50 sont les longueurs des diagonales de mes losanges.

Pour récupérer le losange pointé par la souris que j'utilise pour faire les tests de collision, il suffit de prendre les coordonnées des 4 coins du sprite et d'appliquer la même formule mais sans inverser la matrice pour avoir les coordonnées du losange dans le répère normal.

Je me souviens que à l'époque j'ai du utiliser une feuille de papier pour déduire la matrice de passage.
En ce qui concerne les matrices, tu devrais trouvé pas mal de documentation sur internet, à l'époque j'avais trouvé ça sur wikipédia en lisant un article sur les matrices de passage, bref, google est ton ami.


 
« Modifié: Mai 28, 2013, 08:39:31 pm par Lolilolight »