Pouvoir utiliser les listerner pendant une pause
emilio098
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
j'ai cree un Snake mais depuis que j'ai mis les pauses, les listener des boutons de mon IHM ne marche plus...
Quelqu'un aurait une solution ? Merci d'avance
j'ai cree un Snake mais depuis que j'ai mis les pauses, les listener des boutons de mon IHM ne marche plus...
Quelqu'un aurait une solution ? Merci d'avance
while(perdu==false){ Thread.sleep(400); if(Deplacement=="haut"){ déplacerHaut(); }else if(Deplacement=="bas"){ déplacerBas(); }else if(Deplacement=="gauche"){ déplacerGauche(); }else if(Deplacement=="droite"){ déplacerDroite(); }else{ if(dernierDeplacement=="haut"){ déplacerHaut(); }else if(dernierDeplacement=="bas"){ déplacerBas(); }else if(dernierDeplacement=="gauche"){ déplacerGauche(); }else if(dernierDeplacement=="droite"){ déplacerDroite(); } } g.afficher(); }
A voir également:
- Pouvoir utiliser les listerner pendant une pause
- Utiliser chromecast - Guide
- Utiliser une tablette comme ecran pc - Guide
- Utiliser iphone comme webcam - Guide
- Imprimante en pause hp ✓ - Forum Imprimante
- Votre pc ne peut pas utiliser un autre écran ✓ - Forum Montage et acquisition vidéo
1 réponse
Bonjour,
Dans quel contexte ce code s'exécute ? Tu travailles avec Swing, Java FX, autre ?
De manière générale, un listener doit rendre la main le plus vite possible, l'affichage ne sera pris en compte qu'une fois le listener terminé, tu ne dois donc pas faire une boucle infini à l'intérieur d'un listener car sinon ton affichage ne se fera jamais.
Je t'invite à créer une tâche périodique, qui va aller lire le contenu d'une variable de direction que ton listener aura modifié. Ainsi le listener aura juste à faire le set de la variable, qui ne sera pris en compte que lorsque la tâche périodique sera de nouveau appelée.
Exemple de tâche périodique qui affiche l'heure toutes les secondes :
Voir la documentation : https://docs.oracle.com/javase/10/docs/api/java/util/concurrent/ScheduledExecutorService.html
Remarque : il ne faut pas comparer des objets avec l'opérateur == qui compare les références, pas les valeurs. Il faut utiliser la méthode equals comme
Dans quel contexte ce code s'exécute ? Tu travailles avec Swing, Java FX, autre ?
De manière générale, un listener doit rendre la main le plus vite possible, l'affichage ne sera pris en compte qu'une fois le listener terminé, tu ne dois donc pas faire une boucle infini à l'intérieur d'un listener car sinon ton affichage ne se fera jamais.
Je t'invite à créer une tâche périodique, qui va aller lire le contenu d'une variable de direction que ton listener aura modifié. Ainsi le listener aura juste à faire le set de la variable, qui ne sera pris en compte que lorsque la tâche périodique sera de nouveau appelée.
Exemple de tâche périodique qui affiche l'heure toutes les secondes :
import java.util.Date; import java.util.concurrent.*; public class Test { public static void action() { System.out.println(new Date()); } public static void main(String[] args) { Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(Test::action, 0, 1, TimeUnit.SECONDS); } }
Voir la documentation : https://docs.oracle.com/javase/10/docs/api/java/util/concurrent/ScheduledExecutorService.html
Remarque : il ne faut pas comparer des objets avec l'opérateur == qui compare les références, pas les valeurs. Il faut utiliser la méthode equals comme
if(Deplacement.equals("haut"))par exemple.