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

Auteur Sujet: Collision Tilemap  (Lu 29336 fois)

0 Membres et 1 Invité sur ce sujet

PtichapronRouge

  • Newbie
  • *
  • Messages: 41
    • Voir le profil
    • E-mail
Re : Collision Tilemap
« Réponse #30 le: Mai 11, 2014, 01:31:26 pm »
Accessoirement, je te conseille d'aller faire un tour par ici : http://www.sfml-dev.org/documentation/2.1-fr/
La doc est claire, et même si elle est en anglais ça reste très compréhensible (merci Laurent). Tu ne devrais pas avoir trop de problemes :)
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 #31 le: Mai 11, 2014, 01:50:53 pm »
Citer
Quand j'aurais l'occasion je veux bien essayer de te faire un petit code de démonstration de gestion de collision, mais d'ici là, essaie de trouver tes propres solutions, tu les retiendras mieux, tu les comprendras mieux, et ce sera plus facile de les adapter à tes futurs projets  :)


Merci, :-*, mais je pense quand même trouver d'ici 7 heures ce soir(enfin j'éspère :D)

Citer
Ici ce sont les coordonnées du coin haut-gauche (0,0), la hauteur(20) et la largeur(20) 
Donc la en forme un cube de 20-20 au cord 0, 0 == par deault?

pourquoi ma tu passer cette page
Citer
http://www.sfml-dev.org/documentation/2.1-fr/
elle parle ni de collision ni de "blockage"  ???



 

PtichapronRouge

  • Newbie
  • *
  • Messages: 41
    • Voir le profil
    • E-mail
Re : Collision Tilemap
« Réponse #32 le: Mai 11, 2014, 02:06:04 pm »
Citer
Donc la en forme un cube de 20-20 au cord 0, 0 == par deault?
c est ça :)

Citer
pourquoi ma tu passer cette page
Citer
http://www.sfml-dev.org/documentation/2.1-fr/
elle parle ni de collision ni de "blockage"  ???
parce que c'est la doc de la SFML, et qu' on y trouve plein de choses intéressantes :D
Par exemple tu peux y lire plein de choses sur la classe sf::Rect, notamment les descriptions des fonctions intersects et contains, très utiles pour les collisions ;)
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 #33 le: Mai 11, 2014, 02:09:45 pm »
A ok... :D

pour ce code
if(rect1.intersects(rect2))
     std::cout << "Collision" << std::endl;
else
     std::cout << "Pas collision" << std::endl;
je l'ai remplacé par:

if(sprite_perso.intersects(rect))
     std::cout << "Collision" << std::endl;
else
     std::cout << "Pas collision" << std::endl;

et mon compilateur indique que ce n'est pas possible..
comment je fais?

PtichapronRouge

  • Newbie
  • *
  • Messages: 41
    • Voir le profil
    • E-mail
Re : Collision Tilemap
« Réponse #34 le: Mai 11, 2014, 02:18:02 pm »
Tiens ? Ne t'aurais-je pas envoyé un lien intéressant tout à l heure ?  :P

Regarde bien la doc, intersects est une methode de la classe sf::Rect, et il me semble que sprite_perso est un objet de type sf::Sprite non ? ^^

Essaie d'utiliser sf::Sprite::getGlobalBounds(), qui renvoie, ô miracle, un sf::FloatRect ;)
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 #35 le: Mai 11, 2014, 02:30:44 pm »
Je connais déjà d'autre méthode pour intercepter la collision, mais aucune sur la collision, tu ne connais pas un "principe" pour que le perso, soie blocker comme sur un mur?

je vais lire les intersects je viens de finir de manger....

PtichapronRouge

  • Newbie
  • *
  • Messages: 41
    • Voir le profil
    • E-mail
Re : Collision Tilemap
« Réponse #36 le: Mai 11, 2014, 02:40:48 pm »
Ne pas faire bouger ton perso me semble être un bon moyen de le rendre immobile :)
Au lieu de faire bouger ton perso directement après après détecter les événements claviers, calcule les coordonnées qu   aurait ton perso si tu le bougeais, et vérifie si ces coordonnées provoquent une collision. Si oui, tu ne fais pas bouger le perso, sinon tu lui appliques le mouvement :)
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 #37 le: Mai 11, 2014, 02:45:47 pm »
Citer
Au lieu de faire bouger ton perso directement après après détecter les événements claviers, calcule les coordonnées qu   aurait ton perso si tu le bougeais, et vérifie si ces coordonnées provoquent une collision. Si oui, tu ne fais pas bouger le perso, sinon tu lui appliques le mouvement :)

Je sais cela, mais quel calcule comme(en ligne de code)
y'a t'il 20 lignes de codes pour montrer comment le perso ne traverse pas le mur sans bug... pliz ???

j'ai deja réussis a ne le faire pas traverser mais des bug se sont produis au coins droite & bas :-\

PtichapronRouge

  • Newbie
  • *
  • Messages: 41
    • Voir le profil
    • E-mail
Re : Collision Tilemap
« Réponse #38 le: Mai 11, 2014, 03:03:09 pm »
Je t ai dit que je n avais pas accès à mon PC pour l instant, je ne peux pas t écrire un programme de démo comme ça depuis mon tel, donc d ici que j ai accès à mon PC, et à moins que quelqu'un d autre ne te ponde le code, tu dois chercher tes propres solutions.
Fais toi un petit projet dans lequel tu te concentres uniquement sur ce problème, relis bien tout ce qui a été dit, car beaucoup de choses utiles ont été dites, et fais tes tests. Avec de la persévérance on finit toujours par réussir :)
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 #39 le: Mai 11, 2014, 03:10:38 pm »
Ok merci,
(dsl je ne savais pas que tu n'avais pas de pc)
je recommence a 0...

spyker18

  • Newbie
  • *
  • Messages: 41
    • Voir le profil
Re : Collision Tilemap
« Réponse #40 le: Mai 11, 2014, 06:13:04 pm »
 :-\La je n'arrive pas j'ai été sous 20 forum regarder 10 vidéo englaise et française... :-\

Le problème que que je suis un débutant et je ne sais même pas par ou commencer...

qqn aurait une vingène de lignes de code pour le début pour moi svp :-\ ???


PtichapronRouge

  • Newbie
  • *
  • Messages: 41
    • Voir le profil
    • E-mail
Re : Collision Tilemap
« Réponse #41 le: Mai 11, 2014, 06:48:58 pm »
Tiens essaye ça :)
Mais je te préviens, ça marche mais ce n'est qu'un code d'exemple, dans un vrai projet il faudrait améliorer beaucoup de choses ^^

Enfin, ca te donne une idée comme ca :)

Un coca, un ordinateur, et un livre SFML Game Development. Elle est pas belle la vie ?

PtichapronRouge

  • Newbie
  • *
  • Messages: 41
    • Voir le profil
    • E-mail
Re : Collision Tilemap
« Réponse #42 le: Mai 11, 2014, 06:49:14 pm »
int main()
{
    sf::RenderWindow window(sf::VideoMode(600, 600), "SFML works!");
    sf::Texture texture;
    if(!texture.loadFromFile("barbare.png", sf::IntRect(0,0,64,64)))
    {
        std::cout << "erreur" << std::endl;
        window.close();
    }
    sf::Sprite perso;
    perso.setTexture(texture);
    sf::Vector2f position(0,0);

    sf::RectangleShape mur;
    mur.setSize(sf::Vector2f(64,64));
    mur.setPosition(300,300);
    mur.setFillColor(sf::Color::Red);

    while(window.isOpen())
    {
        sf::Vector2f mouvement(0,0);
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
            mouvement.y -= 0.1;
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
            mouvement.y += 0.1;
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
            mouvement.x += 0.1;
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
            mouvement.x -= 0.1;

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

        if(!virtalSprite.intersects(mur.getGlobalBounds()))
            perso.move(mouvement);
        else
            std::cout << "collision" << std::endl;

        window.clear(sf::Color::Black);
        window.draw(mur);
        window.draw(perso);
        window.display();
    }

    return 0;
}
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 #43 le: Mai 11, 2014, 08:24:37 pm »
Salut! Merci Beaucoup!!! ;D :D ;) :)

Juste une Dernière petite question :

        sf::Vector2f mouvement(0,0);
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
            mouvement.y -= 0.1;
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
            mouvement.y += 0.1;
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
            mouvement.x += 0.1;
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
            mouvement.x -= 0.1;
Je peux bien évidément transormer en "gestion_clavier" comme je l'avais fais?

&
J'ai éxaminé le code, mais a aucun moment on dit ou le personnage dois s'arreter pour pas traversé le carré? qu'elle est cette magie :o


sur ce merci beaucoup pour ton aide! ;)






edit: je ne serais pas la cet semaine j'ai une gros test de script dans ma classe sur https://aseba.wikidot.com/fr:thymio (une programmation d'un robot de EPFL) ou je suis le plus avancé de ma classe...(par a port à la SFML ;D)
« Modifié: Mai 11, 2014, 08:33:10 pm par spyker18 »

PtichapronRouge

  • Newbie
  • *
  • Messages: 41
    • Voir le profil
    • E-mail
Re : Collision Tilemap
« Réponse #44 le: Mai 11, 2014, 08:29:56 pm »
Je ne lui dit jamais de s'arreter effectivement ^^
regarde ici :
 if(!virtalSprite.intersects(mur.getGlobalBounds()))
            perso.move(mouvement);

ça veut dire ça :
si la position du personnage après déplacement ne provoque pas de collision avec le mur, alors deplace le personnage.Sinon ne le bouge pas. Tout simple :)

oui tu vas pouvoir réutiliser ta fonction gestion clavier, pas de souci :)
de toute facon il y a bcp de choses a ameliorer dans ce code ^^

relis mon code, il n y a qu une seule fois
sf::RenderWindow window(sf::VideoMode(600, 600), "SFML works!");
, c est juste toi qui a foire ton ctrl-v :p
Un coca, un ordinateur, et un livre SFML Game Development. Elle est pas belle la vie ?