IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaFX Discussion :

JavaFX boucle While


Sujet :

JavaFX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 20
    Par défaut JavaFX boucle While
    Bonjour,
    Je me rends compte à quel point il est difficile de faire une simple boucle while sur une librairie graphique...
    En fait voilà je suis bloqué: je veux réaliser un algorithme génétique, de petites flèches sortent d'un labyrinthe.
    Le problème c'est que mon programme devra alterner animation des flèches / cacul de la nouvelle génération(sélection mutation,...) / animation / calcul / animation / ... bref
    Et ce jusqu’à ce qu'un individu atteigne le point d'arrivée. Auquel cas l'expérience est terminée

    Le problème c'est que en JavaFX, faire une boucle, donc un temps de calculs, met le programme en pause, du moins la partie graphique. Je ne sais pas du tout comment faire pour me débloquer avec les objets JavaFX

    Merci d'avance de votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 900
    Billets dans le blog
    54
    Par défaut
    Tutoriel sur l'exécution d'une tâche de fond en JavaFX
    Sachant qu’un thread basique peut tout aussi bien faire l'affaire (le but de ce framework est juste de simplifier le dialogue entre le thread de la tâche de fond et le thread graphique).

    Après un jeu (on va partir du principe que ce que tu veux faire se rapproche quand même d'un jeu) ça utilise en général un concept différent : un timer central qui permet de faire "vivre" le monde (y compris les animations récurrentes du décor). En gros tu as une boucle qui a chaque pas de temps va modifier l'etat du monde, bouger les sprites, changer les animations, reagir en fonction des actions du joueur ou de l'ia, etc. En JavaFX ça se fait via la classe AnimationTimer.

    Comprendre la programmation d'un jeu vidéo - La boucle de jeu
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 20
    Par défaut
    Dacc merci,
    Tout ce qui est boucle de jeu ça j'ai compris c'est bon mais là je voulais rester à travailler avec les animations et transitions JavaFX. Mon principale problème c'est juste que je voudrait alterner justement des périodes de boucle de jeu puis des périodes de calcul en arrière plan. Et c'est la boucle de jeu j'arrive pas à voir comment la "relancer" avec des paramètres différents. Peut être en réinitialisant toutes les positions et remettre à i=0 la lecture de la trajectoire en changeant les Individus conçernés ? Et ça dès que les conditions de nouvelle génération sont atteintes ?

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 20
    Par défaut
    Et bien re ! J'ai une solution qui répond à mon problème !

    Alors voilà je vous explique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Dans l'interface(après l'affichage de la fenêtre tout ça):
    Calculeur calculs = new Calculeur(nbIndividus);
                boucle = new AnimationTimer(){
                    public void handle(long l){
     
                        //mes animations, et tout le tralala
     
                        if(laPeriodeDAnimationEstFinie){
                            this.stop();
                                                    //hop on passe en mode calculs
                            synchronized(calculs){
                                calculs.notify();
                            }
                        }
                    }
                };
                //remarquez que pour l'instant on a pas lancé l'animation, d'abord on passe aux calculs
                calculs.start();

    Et il faut créer cette classe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    public class Calculeur extends Thread{
     
     
        public Calculeur(){
            super();
        }
     
        public synchronized void run(){
            boolean partieTerminee = false;
            //ce boolean sera important, il faudra penser à le mettre à true un jour pour finir le programme, tout simplment lorsque une génération aura un gagnant auquel cas l'expérience est terminée !
                    while(!partieTerminee){
                    //ICI il faut mettre tous les calculs de chaque générations, (sélections, mutations,...)
                            //et là hop on lance l'AnimationTimer !
                Main.boucle.start();
                //mais attention ! il faut mettre en pause ce thread calculeur, il ne recalculera que quan dl'animation sera terminée, d'où le notify() de tt à l'heure
                            try {
                    this.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
     
     
     
     
            }
     
        }
    }
    Voilà pour la structure ça peut toujours aider, je vais pouvoir aller travailler avec

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 900
    Billets dans le blog
    54
    Par défaut
    Impec. A noter cependant qu'il existe deja un moteur de jeu en JavaFX : FXGL
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. boucle while trop lente
    Par atouze dans le forum Access
    Réponses: 17
    Dernier message: 15/06/2005, 16h35
  2. Boucle while & read
    Par gibet_b dans le forum Linux
    Réponses: 4
    Dernier message: 29/04/2005, 15h38
  3. boucle while et post incrémentation
    Par tut dans le forum C++
    Réponses: 7
    Dernier message: 10/12/2004, 17h24
  4. [MFC] Dialog dans une boucle while
    Par oxor3 dans le forum MFC
    Réponses: 5
    Dernier message: 23/04/2004, 22h51
  5. [débutant]Documentation? boucle "while"? Session?
    Par o151181 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 19/01/2004, 15h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo