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

Auteur Sujet: Deplacement a la souris limite par un cercle  (Lu 1838 fois)

0 Membres et 2 Invités sur ce sujet

Pakmaan

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Deplacement a la souris limite par un cercle
« le: Novembre 24, 2015, 06:49:42 am »
Bonjour a tous,

J'essaye de réaliser une suite d'action pour déplacer mon sprite :

Je clic sur mon sprite (réussi)
j'affiche un cercle a ses pieds (reussi)
je crée un fantôme de mon sprite (réussi)
Le fantôme suis ma souris sans que j'ai besoin de cliquer (pas réussi)
Ma souris ne doit pas sortir du cercle, ou du moins mon fantôme (pas réussi)
je re-clique pour déplacé mon perso a l'endroit de mon fantôme

Je ne trouve pas la condition adéquate pour réaliser cette suite d'action, pourriez vous m'aidez je débute sur SFML et en C++.

G.

  • Hero Member
  • *****
  • Messages: 1592
    • Voir le profil
Re : Deplacement a la souris limite par un cercle
« Réponse #1 le: Novembre 24, 2015, 07:34:16 am »
Calcule la distance entre le centre du cercle et le centre du sprite.
Si elle est supérieure au rayon du cercle tu n'appliques aucun déplacement à ton sprite.


Au moment où tu cliques sur ton sprite, mets un booléen à true et crée ton fantome.
A chaque frame (sf::Mouse::getPosition) ou à chaque déplacement de souris (sf::Event::MouseMoved) et quand le booléen est true, déplace ton fantome à la position de la souris.
Si il est false, bah tu fais rien.
Quand tu recliques mets le à false et déplace ton sprite à la position de ton fantome.

Pakmaan

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Re : Deplacement a la souris limite par un cercle
« Réponse #2 le: Novembre 24, 2015, 08:14:51 pm »
Merci pour ta réponse, je ne suis pas sur de faire ce que tu me demande :

if(Perso.contains(posSouris.x, posSouris.y) && sf::Mouse::isButtonPressed(sf::Mouse::Left))
        {
            if(turn = true)
            {
            Zmove = Cercle(150, posChar.x, posChar.y);
            window.draw(Zmove);
            window.draw(Ghost.SpriteCharacter);
            posGhost = Ghost.SpriteCharacter.getPosition();
            Ghost.SpriteCharacter.setPosition(sf::Mouse::getPosition(window).x, sf::Mouse::getPosition(window).y);
            if(!Col_PC(posGhost.x, posGhost.y, Zmove))
                break;
            }
        }

posChar, posGhost sont les vecteurs 2f avec les positions.
posSouris le vecteur 2i des coordonnées de ma souris.
Col_PC est ma fonction de collision entre un cercle et un point.

Je déplace mon fantome lorsque je reste appuyer sur la souris (je n'arrive pas a faire autrement) et lorsque je replace mon perso sur le fantome lors du relachement de ma souris, enfaite tout ce fait trop rapidement et mon perso suis mon fantome tout le temps ainsi que mon cercle Zmove.
« Modifié: Novembre 24, 2015, 08:17:56 pm par Pakmaan »

G.

  • Hero Member
  • *****
  • Messages: 1592
    • Voir le profil
Re : Deplacement a la souris limite par un cercle
« Réponse #3 le: Novembre 25, 2015, 01:39:09 am »
Quand on fait une comparaison c'est ==
Quand on fait une assignation c'est =

Et tu peux écrire juste
if (turn)
C'est pareil que
if (turn == true)
car turn est un booléen (je pense ?) donc la condition est true quand il est à true et false quand il est à false

Je ne pense pas que ton break serve à quelque chose de bien.

Un clic, c'est un évènement MouseButtonPressed (ou MouseButtonReleased pour quand tu relâches la souris).
Ça marche comme dans le tutoriel ou dans l'exemple de la doc, qu'est-ce que t'as pas compris plus précisément ?
« Modifié: Novembre 25, 2015, 01:52:50 am par G. »

Pakmaan

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Re : Deplacement a la souris limite par un cercle
« Réponse #4 le: Novembre 25, 2015, 08:43:52 pm »
Merci encore G.

J'ai finalement réussi a utiliser les méthodes buttonpressed & released.
Et même MouseMove, bien que celui ci ne me convienne pas réellement lag sur l'affichage de mon fantôme assez royalement.(avec event.mouseMove) mais moins avec sf::Mouse::getPosition()

Mon problème persiste je n'arrive pas a bloquer ma souris a l’intérieur du cercle bien que ma fonction de collision fonctionne lol
« Modifié: Novembre 25, 2015, 09:28:31 pm par Pakmaan »