Forum de la communauté SFML

Aide => Général => Discussion démarrée par: MasterKey le Janvier 23, 2017, 07:42:45 pm

Titre: Probleme collision TileMap
Posté par: MasterKey le Janvier 23, 2017, 07:42:45 pm
Bonjour j'utilise maintement le tilemap , je n'ai pas de probleme pour afficher mes tiles ,ma map es crée tout va bien
mais j'ai du mal a comprendre les collision sur mes Tiles .

J'utilise le code sur  https://www.sfml-dev.org/tutorials/2.0/graphics-vertex-array-fr.php (https://www.sfml-dev.org/tutorials/2.0/graphics-vertex-array-fr.php) pour ma Tilemap

J'ai regarder le tuto de (Code Made Easy) sur les collision sur les tile mais je ne comprend pas vraiment comment l'inserer dans mon code car c'est vrm differant du code que la sfml propose :/

désoler d'etre si débutant ,c'est triste d'avoir une tilemap mais pas comprendre les collision  ^^''

en esperant que quelqu'un pourrai m'éclaisir un peu sur le sujet ,Merci d'avance!  ;D
Titre: Re : Probleme collision TileMap
Posté par: AlexisAG le Février 12, 2017, 07:30:44 pm
Comment veux tu gérer tes collisions en fait ?

Moi j'ai une méthode qui renvoie l'index de mon tile. ensuite avec cette indexx bah je met collision a true ou false.

Voilà ma méthode :
int TileMap::getTextureIndex(sf::Vector2f pos_Player, int level[], int dir)
{
    // dir 0 = gauche | dir 1 = right | dir 2 = up | dir 3 = down
    int x = pos_Player.x;
    int y = pos_Player.y;
    int index=-1;
    switch(dir)
    {
    case 0:
        index = ((x-(x%sizeTexture.x))/sizeTexture.x) + ((((y-(y%sizeTexture.y)) / sizeTexture.y) * p_width));
        break;
    case 1:
        index = ((x-(x%sizeTexture.x))/sizeTexture.x) + ((((y-(y%sizeTexture.y)) / sizeTexture.y) * p_width)) +1;
        break;
    case 2:
        index = (((x+16)-((x+16)%sizeTexture.x))/sizeTexture.x) + ((((y-(y%sizeTexture.y)) / sizeTexture.y) * p_width));
        break;
    case 3:
        index = (((x+16)-((x+16)%sizeTexture.x))/sizeTexture.x) + ((((y-(y%sizeTexture.y)) / sizeTexture.y) * p_width)) + p_width;
        break;
    }
    printf("Index texture %i \n",index);

    return level[index];
}
 

Je ne sais pas si c'est ce que tu veux faire mais bon voilà si ça peut t'aider à comprendre.