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

Auteur Sujet: [RESOLU] Thread et Fonction de classe à un parametre  (Lu 4354 fois)

0 Membres et 1 Invité sur ce sujet

Djushima

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
[RESOLU] Thread et Fonction de classe à un parametre
« le: Janvier 22, 2020, 08:32:10 pm »
Bonjour!

Je suis plutôt nouveau sur SFML, et je rencontre actuellement un problème dans lequel je comprends le soucis, mais ne voit pas comment mettre en place la solution

J'ai une classe, appellée "Animation", avec a l'interieur une fonction Play(). J'aimerai que cette fonction s'execute en parallèle du reste du programme et utilse donc un Thread. Voici le bout de code correspondant:

public:

        Animation(animName index) : animThread(&Animation::Play, this){
                this->Name = index;
                switch (Name) { . . . }
        }

        ~Animation() { . . . }

        void Play(sf::RenderWindow &window);

        sf::Thread animThread;
};

Je l'appelle dans le main() de mon app avec le code suivant:
auto shotAnim = new Animation(animName::Shot);
shotAnim->animThread.launch();

Et il me donne l'erreur suivante: C2064: le terme ne correspond pas à une fonction qui prend 1 argument.

Je comprends qu'il me manque l'argument de type RenderWindow dans "shotAnim->animThread.launch();", mais je ne vois pas comment le passer.

J'utilise Visual Studio 2017 (Debug, x86).

Pouvez-vous m'aider? merci !
« Modifié: Janvier 23, 2020, 01:59:09 pm par Djushima »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re: Thread et Fonction de classe à un parametre
« Réponse #1 le: Janvier 22, 2020, 09:51:12 pm »
Avec SFML tu ne peux pas. Utilise std::thread !

Et... tout cela sent la fausse bonne idée et les embrouilles ;) Tu n'as pas besoin d'un thread pour gérer des animations.
Laurent Gomila - SFML developer

Djushima

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re: Thread et Fonction de classe à un parametre
« Réponse #2 le: Janvier 22, 2020, 11:27:33 pm »
Merci de ta réponse ! Je vais aller voir ca.

Ah? Je veux jouer une animation en oneshot, pas en continu. Du coup j'ai fais ma fonction play a call quand je le souhaite. Le soucis est que je suis obligé de passer par un while pour parcourir toutes les frames de mon anim, et a partir de la, ca bloque toute mon application tant que l'anim n'est pas finie, pour ca que j'ai pensé a un thread.

Quelle solution me recommande-tu d'aller me renseigner?

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re: Thread et Fonction de classe à un parametre
« Réponse #3 le: Janvier 23, 2020, 02:29:01 am »
Par exemple tu peux update ton animation à chaque frame du jeu en lui passant le temps écoulé depuis la dernière frame, ce temps s'accumule et quand il dépasse le temps qu'est censé durer l'image courante de l'animation tu passes à la prochaine image.
Tu peux t'inspirer d'un exemple sur le wiki avec la fonction update.

Pas compris ce que tu veux dire par "jouer une anim en oneshot" par contre :p

Djushima

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re: Thread et Fonction de classe à un parametre
« Réponse #4 le: Janvier 23, 2020, 01:34:31 pm »
Je vois. Il faudrait donc que j'appelle ma fonction Play a chaque frame plutôt qu'une fois (une fonction update plutot que play du coup, je vais la modifier en m'inspirant des ressources).

C'est ca que j'entendais par oneshot. J'appelle ma fonction dans une seule frame, elle exécute toute l'animation (changement de sprite, clear, draw, display toutes les x secondes) et s'arrête, et non pas que celle ci voit si elle s'update a chaque frame.

Gros soucis de vision de la structure de ma part ahah.

Merci pour tout ca, je file modifier mon code !

EDIT: C'est bon ! J'ai adapté les ressources a mon code, et c'est vrai que c'est 100x plus simple. Merci Beaucoup !
« Modifié: Janvier 23, 2020, 06:15:59 pm par Djushima »