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

Auteur Sujet: Collision Tilemap  (Lu 24283 fois)

0 Membres et 1 Invité sur ce sujet

spyker18

  • Newbie
  • *
  • Messages: 41
    • Voir le profil
Re : Collision Tilemap
« Réponse #45 le: Mai 11, 2014, 08:44:30 pm »
Oui dsl dailleur je l'ai enlevé dec j'ai compris (bug de ctr-v) ;D

perso.move(mouvement);
Je pourrais par exemple lui inscrite "gestion_clavier" a lieu de mouvement?






PtichapronRouge

  • Newbie
  • *
  • Messages: 41
    • Voir le profil
    • E-mail
Re : Collision Tilemap
« Réponse #46 le: Mai 11, 2014, 09:08:44 pm »
Si tu modifies ta fonction gestion_clavier pour qu elle renvoie un vector2f, alors oui c est possible :)
Un coca, un ordinateur, et un livre SFML Game Development. Elle est pas belle la vie ?

spyker18

  • Newbie
  • *
  • Messages: 41
    • Voir le profil
Re : Collision Tilemap
« Réponse #47 le: Mai 11, 2014, 09:21:53 pm »
Okey merci,
la ligne serait ~
perso.move(gestion_clavier)
?



PtichapronRouge

  • Newbie
  • *
  • Messages: 41
    • Voir le profil
    • E-mail
Re : Collision Tilemap
« Réponse #48 le: Mai 11, 2014, 10:10:02 pm »
Nope ce serait
perso.move(gestion_clavier())
 
;)
Un coca, un ordinateur, et un livre SFML Game Development. Elle est pas belle la vie ?

spyker18

  • Newbie
  • *
  • Messages: 41
    • Voir le profil
Re : Collision Tilemap
« Réponse #49 le: Mai 12, 2014, 05:37:46 pm »
A aussi, pourquoi mon personnage bouge avec :

        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
            mouvement.x -= 1;
Normalement ça ne devrais pas être

avec Perso.x?

Citer
Nope ce serait
perso.move(gestion_clavier())
 
;)

Non Marche pas mon compilateur affichie des fautes...

Mais pour la gestion clavier on peux aire un "mouvement" sans que le personnage bouge avec ces lignes?

PtichapronRouge

  • Newbie
  • *
  • Messages: 41
    • Voir le profil
    • E-mail
Re : Collision Tilemap
« Réponse #50 le: Mai 12, 2014, 07:03:25 pm »
Je crois que tu n as pas vraiment compris mon code, et c est bien parce que ça risquait d arriver que je te conseillais de chercher tes propres  solutions x)

La ligne
 mouvement.x -= 1;
ne fais pas bouger le personnage, elle donne une valeur a l abscisse du vecteur mouvement.
Ensuite, on vérifie que ce mouvement ne risque pas de provoquer une collision (if virtualSprite...) et enfin on applique ce mouvement au perso avec la ligne
perso.move(mouvement)

La fonction move prend un vector2 en paramètre, est ce que tu as bien modifié ta fonction gestion_clavier() pour qu elle renvoie un vector2f ? Et est ce que tu as bien pensé à mettre un point virgule après ? ^^'
Un coca, un ordinateur, et un livre SFML Game Development. Elle est pas belle la vie ?

spyker18

  • Newbie
  • *
  • Messages: 41
    • Voir le profil
Re : Collision Tilemap
« Réponse #51 le: Mai 13, 2014, 05:26:36 pm »
Oui :

Au cas ou j'aurais eu faux pour transofrmer ma gestion_clavier a un vecteur2f
je lui rajoute "sf::vector2f"?


PtichapronRouge

  • Newbie
  • *
  • Messages: 41
    • Voir le profil
    • E-mail
Re : Collision Tilemap
« Réponse #52 le: Mai 13, 2014, 07:20:49 pm »
Je comprends pas trop ta question, mais de toute manière, si tu veux pouvoir passer gestion_clavier() en paramètre, tu dois avoir dans ton code :
sf::Vector2f gestion_clavier()
{
sf::Vector2f monVecteur;
//Du code

return monVecteur;
}

//Plus loin

perso.move(gestion_clavier());
Un coca, un ordinateur, et un livre SFML Game Development. Elle est pas belle la vie ?

G.

  • Hero Member
  • *****
  • Messages: 1592
    • Voir le profil
Re : Collision Tilemap
« Réponse #53 le: Mai 14, 2014, 04:24:45 am »
Mec, si t'en es à galérer pour créer une fonction triviale tu ferais mieux d'approfondir ton apprentissage du C++ avant de te remettre à la SFML. Apprendre les 2 en même temps n'est pas une bonne solution.

spyker18

  • Newbie
  • *
  • Messages: 41
    • Voir le profil
Re : Collision Tilemap
« Réponse #54 le: Mai 14, 2014, 01:10:37 pm »
A non escuse au moment ou j'ai finis d'envoyé j'ai trouver le bug... ;D

spyker18

  • Newbie
  • *
  • Messages: 41
    • Voir le profil
Re : Collision Tilemap
« Réponse #55 le: Mai 24, 2014, 09:50:29 am »
De Retour :-\
yo tout le monde après une semaine de script intense sur "aseba sthudio",
je me suis remis sur le projet,(certins amis m'avaient conseillé de faire plusieurs test de collision en même temps, ajouter "des murs")

bref je me suis remis a créer un porjet, animer, remettre emplace mon fameux "rect" en signe de mur,
aucun problème mon personnage et stopé par la collision quand t'il va contre le mur...

*Je recrée un "mur" qui s'appelle "rect2"*

et cette fois le personnage ne sârrette par quand t'il est dans un des murs, j'ai donc r'ajouter :
            else
            {
            std::cout << "collision" << std::endl;
            }
Quand mon personnage entre en collision le message "collision" s'affiche bien mais il ne s'arrête toujours plus,
mon compilateur ne détecte aucun bug, et normalement cela devrais fonctionner :(

Pour test, j'ai ajouter :
            {
            std::cout << "collision" << std::endl;
            collision = false;
            }

        if(collision != false)
        {
            sprite_perso.move(mouvement);
        }
}
ça marche mais qu'avec un(que si je supprime un des rect) sinon rien ne se passe, comme en haut..

Voici La gestion des collision :

void gestion_PersoCollision()
{
        sf::Vector2f mouvement(0,0);
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
        {
            mouvement.y -= speed;
            anim.y = Up;
        }

        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
         {
             mouvement.y += speed;
             anim.y = Down;

         }

        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
         {
             mouvement.x += speed;
             anim.y = Right;
         }

        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
         {
            mouvement.x -= speed;
            anim.y = Left;
         }


                sf::FloatRect test(sprite_perso.getPosition().x + mouvement.x,
                                   sprite_perso.getPosition().y + mouvement.y,
                                   sprite_perso.getGlobalBounds().height,
                                   sprite_perso.getGlobalBounds().width);

        if(!test.intersects(rect.getGlobalBounds()))
            {
            collision = true;
            }
            else
            {
            std::cout << "collision" << std::endl;
            collision = false;
            }

        if(!test.intersects(rect2.getGlobalBounds()))
            {
            collision = true;
            }
            else
            {
            std::cout << "collision" << std::endl;
            collision = false;
            }

        if(collision != false)
        {
            sprite_perso.move(mouvement);
        }
}

Que devrais-je faire pour enlevé ce bug plutôt ennuyeux? :-\ ???

« Modifié: Mai 24, 2014, 09:52:14 am par spyker18 »

OualidH38

  • Newbie
  • *
  • Messages: 46
    • Voir le profil
    • E-mail
Re : Collision Tilemap
« Réponse #56 le: Mai 24, 2014, 11:17:53 am »
C'est pas un bug, tu t'es trompé sur ton booléen "collision", tu le met à true quand il n'y a pas collision et à false quand il y a collision, alors que c'est l'inverse puisque ta dernière condition vérifie s'il y a une collision pour faire bouger ton sprite.
Ca devrait plus ressembler à ça :
 if(!test.intersects(rect.getGlobalBounds()))
            {
            collision = false;
            }
            else
            {
            std::cout << "collision" << std::endl;
            collision = true;
            }

        if(!test.intersects(rect2.getGlobalBounds()))
            {
            collision = false;
            }
            else
            {
            std::cout << "collision" << std::endl;
            collision = true;
            }

        if(!collision)
        {
            sprite_perso.move(mouvement);
        }
 

spyker18

  • Newbie
  • *
  • Messages: 41
    • Voir le profil
Re : Collision Tilemap
« Réponse #57 le: Mai 24, 2014, 11:26:21 am »
Citer
C'est pas un bug, tu t'es trompé sur ton booléen "collision", tu le met à true quand il n'y a pas collision et à false quand il y a collision, alors que c'est l'inverse puisque ta dernière condition vérifie s'il y a une collision pour faire bouger ton sprite.
Ca devrait plus ressembler à ça :
 if(!test.intersects(rect.getGlobalBounds()))
            {
            collision = false;
            }
            else
            {
            std::cout << "collision" << std::endl;
            collision = true;
            }

        if(!test.intersects(rect2.getGlobalBounds()))
            {
            collision = false;
            }
            else
            {
            std::cout << "collision" << std::endl;
            collision = true;
            }

        if(!collision)
        {
            sprite_perso.move(mouvement);
        }
 
Oui merci est désolé j'ai script trop vite, mais ça marche toujours pas mon personnage est bloqué par le premier mur mais pas par le deuxième )=

OualidH38

  • Newbie
  • *
  • Messages: 46
    • Voir le profil
    • E-mail
Re : Collision Tilemap
« Réponse #58 le: Mai 25, 2014, 11:37:02 am »
Essai ça:
if(!test.intersects(rect.getGlobalBounds()) || !test.intersects(rect2.getGlobalBounds()))
            {
            collision = false;
            }
            else
            {
            std::cout << "collision" << std::endl;
            collision = true;
            }


        if(!collision)
        {
            sprite_perso.move(mouvement);
        }
 

spyker18

  • Newbie
  • *
  • Messages: 41
    • Voir le profil
Re : Collision Tilemap
« Réponse #59 le: Mai 25, 2014, 01:32:45 pm »
Um... non dsl, marche toujours pas :-\
 :'(

ici rien ne se passe, même le message "collision" ni viens plus,

comment dois-je faire pour ajouter ce fameux murs?

ou y'at'il une autre solutuion de collision entre certin décor?