Forum de la communauté SFML

Aide => Général => Discussion démarrée par: OualidH38 le Septembre 21, 2013, 09:54:49 am

Titre: Besoin d'aide collision TileMap--Player
Posté par: OualidH38 le Septembre 21, 2013, 09:54:49 am
Bonjour à tous,

Voilà en fait j'aurais besoin que l'on m'explique comment gérer une collision entre mon tile map et mon sprite (le joueur), je sais gérer les collisions entre 2 sprites mais ma map est dessinée comme ici: http://www.sfml-dev.org/tutorials/2.0/graphics-vertex-array-fr.php
C'est à dire à partir de vertexarray et d'un renderstates auquel j'applique la texture. Je ne sais pas comment gérer les collisions entre des vertexarray et un sprite pouvez m'aider?

Bon week end.
Titre: Re : Besoin d'aide collision TileMap--Player
Posté par: OualidH38 le Septembre 21, 2013, 10:40:27 pm
Personne n'a une petite idée?  :D
Titre: Re : Besoin d'aide collision TileMap--Player
Posté par: Laurent le Septembre 21, 2013, 10:52:57 pm
Si ton niveau est une grille 2D, et que les collisions se font par cases pleines (et pas au pixel près), alors tu n'as qu'à avoir par exemple un tableau 2D de booléens, représentant le fait qu'une tile est traversable ou non. Ensuite pour tester c'est enfantin, tu récupères la position de ton personnage en terme de case et tu vérifies dans ton tableau.
Titre: Re : Besoin d'aide collision TileMap--Player
Posté par: OualidH38 le Septembre 21, 2013, 11:08:04 pm
Ah oui merci j'y avais pas pensé, mais si plus tard je souhaite gérer des pixel perfect collisions comment devrais je m'y prendre?
Titre: Re : Besoin d'aide collision TileMap--Player
Posté par: Laurent le Septembre 22, 2013, 11:02:45 am
Je ne vais pas te pondre la méthode là comme ça ;)

D'une part ça dépend de ce que tu veux faire, de comment est organisé ton code. D'autre part il existe plusieurs façons de faire. Donc fais des recherches, lis des articles, expérimente par toi-même, ... tout ne se résout pas magiquement sur les forums.
Titre: Re : Besoin d'aide collision TileMap--Player
Posté par: OualidH38 le Septembre 26, 2013, 07:24:20 pm
Oui je comprends tout à fait  ;D

J'ai essayé avec la technique du tableau, mais je n'arrive pas à faire en sorte de récupérer la position du sprite et de voir si elle est identique avec celle du tableau à 2 dimensions, peux tu y jeter un oeil et me dire si je suis sur la bonne voie s'il te plaît:

donc j'initialise mon tableau isTouching[15][63] avec des 0 et des 1 juste au dessus de ce bout de code:

 for(int i=0; i<15; i++)
    {
        for(int j=0; j<63; j++)
        {
            if(isTouching[i][j] = 1)
            {
                mPlayer.setPosition(mPlayer.getPosition().x, i*32 - mPlayer.getOrigin().y);
                touching = true;
            }
            else
                touching = false;
    }

Pour la collision pour l'instant j'essai juste de gérer la collsion sur l'axe y, touching est un bool qui me permet de savoir si je dois appliquer la gravité et donc faire en sorte que mon sprite chute à l'affichage lorsque que la variable est en false.

 Mon problème est que je met mon personnage dans la position (100, 100) au debut donc il dois chuter jusqu'à atteindre le sol, et bien au lancement du programme mon sprite disparaît et réapparaît au niveau du sol, et les collisions ne sont gérer qu'avec le sol et pas avec la petite plateforme, cela fait quelques jours que je me creuse la tête et je bloque un peu. Je ne cherche pas de correction de code, juste un aiguillement  :)
Titre: Re : Besoin d'aide collision TileMap--Player
Posté par: Laurent le Septembre 26, 2013, 07:39:30 pm
Je ne comprends pas ton algorithme. Ton tableau isTouching représente quoi ?

Sinon, il faut un == dans la condition, pas un =.
Titre: Re : Besoin d'aide collision TileMap--Player
Posté par: OualidH38 le Septembre 27, 2013, 10:25:15 am
Mon tableau isTouching est un tableau qui représente l'endroit sur l'écran ou une tile de la map est présente, ainsi 0 signifie aucune tile et 1 signifie qu'il y a une tile à la position (j*32, i*32).

Merci pour le == j'avais pas fait gaffe  ;D
Titre: Re : Besoin d'aide collision TileMap--Player
Posté par: Laurent le Septembre 27, 2013, 10:42:32 am
Dans ce cas ton code n'a aucun sens. Tu ne fais aucun test là, tu changes juste la position de ton joueur pour chaque case qui contient une tile -- uniquement la tout dernière sera prise en compte.

Essaye déjà de trouver un algorithme qui tient la route sur papier, et ensuite tu pourras t'atteler à son implémentation.
Titre: Re : Besoin d'aide collision TileMap--Player
Posté par: OualidH38 le Septembre 27, 2013, 11:05:10 am
Ok merci pour ton aide  ;)