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

Auteur Sujet: [Résolu]TileMap et collision avec un sprite[Résolu]  (Lu 4381 fois)

0 Membres et 2 Invités sur ce sujet

Geeque

  • Newbie
  • *
  • Messages: 13
    • Voir le profil
[Résolu]TileMap et collision avec un sprite[Résolu]
« le: Mai 27, 2016, 10:20:18 pm »
Bonjour / Bonsoir à tous,

Je travaille actuellement sur un petit projet de Mario en mode arcade, et pour le moment je possède:
          - Un chargement d'ennemi aléatoire
          - Un personnage
          - Une map générée grâce à un fichier.txt sous la forme de int level[ y ][ x ] (Je commence à parcourir le tableau par les y)
          - Une class Scene.hpp qui se charge d'afficher le personnage ainsi que les ennemis
          - Une class Application.hpp qui permet d'afficher la map ainsi que les éléments de la class Scene

Pour le personnage ainsi que les ennemis je possède une class spécifique. Après avoir recherché des solutions via le site de la SFML ainsi que des vidéos Youtube comme CodingMadeEasy je ne suis pas parvenu à détecter mes collisions. Je vous joint les fichiers en ce qui concerne la map en question, en espérant que vous puissiez m'aider.
« Modifié: Juin 02, 2016, 01:51:06 pm par Geeque »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : TileMap et collision avec un sprite
« Réponse #1 le: Mai 28, 2016, 09:29:13 am »
Tu n'as pas plus pratique que des captures d'écran pour montrer ton code ? ???

Et peux-tu décrire ton problème plus précisément que "j'y arrive pas" ? Tu as essayé quoi, et qu'est-ce qui ne marche pas exactement ?
Laurent Gomila - SFML developer

Geeque

  • Newbie
  • *
  • Messages: 13
    • Voir le profil
Re : TileMap et collision avec un sprite
« Réponse #2 le: Mai 28, 2016, 10:19:46 am »
En fait je possède un tableau en 2 dimensions avec lequel je voudrais faire des collisions avec mon sprite quand la tuile est différente de 30 (tuile vide). Du coup dans personnage.hpp j'ai les méthodes qui me retourne la position en x et en y de mon joueur et j'ai _masque qui est une copie de level mais lorsque je tente de faire
if(_masque [_perso.PosX ()][_perso.PosY ()]!=30)
{
    cout <<"collision"<<endl;
}

Ce qu'il se passe est que je détecte bien ma collision mais qu'au bout de x temps j'ai un segmentation fault à cause de la taille de mon tableau par rapport à la position du sprite et ne voit pas comment régler ce soucis car en augmentant la taille de celui-ci je ne détecte plus correctement la collision.
« Modifié: Mai 28, 2016, 10:22:43 am par Geeque »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : TileMap et collision avec un sprite
« Réponse #3 le: Mai 28, 2016, 10:42:43 am »
Citer
au bout de x temps j'ai un segmentation fault à cause de la taille de mon tableau par rapport à la position du sprite
C'est-à-dire ?
Laurent Gomila - SFML developer

Geeque

  • Newbie
  • *
  • Messages: 13
    • Voir le profil
Reponse
« Réponse #4 le: Mai 28, 2016, 10:52:47 am »
Comme mon tableau _mapping[ 19 ] [26 ] , mon sprite est capable de se déplacer au delà de ses bornes car ma fenêtre fait 800*600 ce qui fait que lorsque mon joueur arrive à  x >=50 ou x<0 (je ne saurais expliquer ces chiffres) un segmentation fault se passe alors que si justement je divise la taille de mon joueur je n'ai plus cette erreur mais du coup la collision n'est pas reconnue

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : TileMap et collision avec un sprite
« Réponse #5 le: Mai 28, 2016, 11:06:31 am »
Donc il suffit de tester si les coordonnées X et Y du personnage sont bien dans les limites de ton tableau avant d'y accéder, non ?
Laurent Gomila - SFML developer

Geeque

  • Newbie
  • *
  • Messages: 13
    • Voir le profil
Re : TileMap et collision avec un sprite
« Réponse #6 le: Mai 28, 2016, 11:21:06 am »
Oui je suis d'accord cependant dans tout les cas mon personnage doit pouvoir y acceder afin d'appliquer ce test sur la totalité de la map

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : TileMap et collision avec un sprite
« Réponse #7 le: Mai 28, 2016, 12:20:15 pm »
Pour récupérer la position d'une tile dans un tableau correspondant à la position de ton perso, il faut diviser la position du perso par la taille d'une tile.

Si ton perso est en 200, 300, tu vas pas checker la tile qui est en _mappin[200][300] non ?
Tu n'as pas plus pratique que des captures d'écran pour montrer ton code ? ???
Apparemment non. :o

Geeque

  • Newbie
  • *
  • Messages: 13
    • Voir le profil
Re : TileMap et collision avec un sprite
« Réponse #8 le: Mai 28, 2016, 12:48:19 pm »
Finalement j'ai reussi à créer des sf::RectangleShape qui arrive à recuperer la position de mes collisons mais quand je test mes headbox rien n'affiche les collisions.
Ce qui teste mes collisions :
for (int y = 0; y < 19; y++){
                        for (int x = 0; x < 25; x++){
                                _headboxRect=_rectangle[y][x].getGlobalBounds(); // _rectangle [y][x] correspond aux rectangles bleu sur l'image
                                if(_headboxPerso.intersects(_headboxRect))
                                {
                                        cout<<"collision"<<endl;
                                }
                        }
}
 

Je ne comprend pas pourquoi cela ne fonctionne pas, si vous pouviez juste m'indiquer une piste à explorer afin de ces intersections puisse fonctionner je vous remercie
« Modifié: Mai 28, 2016, 12:50:46 pm par Geeque »

 

anything