Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - dm67x

Pages: [1]
1
Tu peux utiliser des pointeurs de fonction pour déclencher une action lors d'un click.

Par exemple :

class X {
    private:
        void (*action)();

    public:
      void setAction(void (*action)());
      void update();
}

void X::update() {
      if (sf::Mouse::isButtonPressed(sf::Mouse::Left))
         action();
}
 

Par contre il faut que tu définisses l'action avant de faire le click sinon tu auras un segfault ;)

2
Ok merci beaucoup pour ton aide, au passage ta lib est juste nickel ;)

3
Oui je viens de rectifier cela, je l'avais oublié dans mon exemple mais justement comment je fais pour récupérer la transformation de A dans B pour appliqué la rotation sur la position de mon objet B.

Par exemple: mon objet A je lui applique une rotation et donc mon objet B à qui je lui avais déjà appliqué un positionnement avec setPosition(...) a juste sa position habituelle sans la rotation effectué par A ? Donc pour passer la transformation de A dans B je dois lui passer par les paramètres (ex: constructeur) ?

4
Merci pour ta réponse.
En fait mes deux classes héritent de sf::Transformable et sf::Drawable, du coup dans ma classe A j'effectue une rotation et un positionnement tandis que dans ma classe B j'effectue un positionnement et une mise à l'échelle, or je veux pouvoir cliquer sur la classe B donc récupérer la transformation de A la multiplier par B pour avoir la bonne position de la classe B et utiliser ainsi sf::Mouse pour cliquer sur cette carte.

Exemple:

class A : public sf::Transformable, public sf::Drawable
{
private:
B * object_b;

public:
void draw(sf::RenderTarget & target, sf::RenderStates states) const;
};
 

// Fichier A.cpp
//...
setRotation(rotation);
//...
void A::draw(sf::RenderTarget & target, sf::RenderStates states) const
{
states.transform *= getTransform();
target.draw(*object_b, states);
}
 

class B : public sf::Transformable, public sf::Drawable
{
public:
void update(sf::Event evt);
void draw(sf::RenderTarget & target, sf::RenderStates states) const;
}
 

//Fichier B.cpp
void B::update(sf::Event evt)
{
sf::Vector2f position = getTransform().transformPoint(getPosition()); // récupérer la position de la carte avec la rotation appliquée la classe A
// Verifier si position + taille contient le pointeur de la souris lors d'un click souris
}

void B::draw(sf::RenderTarget & target, sf::RenderStates states) const
{
states.transform *= getTransform();
target.draw(....., states);
}
 

Et ce que je fais quelque chose qui ne va pas ?
Navré de vous embêter autant :)

5
Bonjour à tous,

Je voudrais récupérer les transformations (sf::Transform) appliqué par exemple sur une classe (A) qui elle-même contient un objet (B) composite (agrégation) et je voudrais donc récupérer la transformation appliquée à A dans B pour multiplier cette transformation avec la transformation de B et ainsi calculer les coordonnées des objets en utilisant les méthodes transformRect et transformPoint.

Merci à vous de m'éclaircir sur ce point.

Pages: [1]