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 :

Probleme multiple keylistener


Sujet :

JavaFX

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Probleme multiple keylistener
    Bonjour,
    Je travaille actuellement sur un projet de jeu de plateforme en javafx. Je dois m'occuper des déplacements du héros mais j'ai un problème. Quand je saute en avançant je souhaiterais qu'une fois le saut fini il continue d'avancer sans avoir à ré appuyer sur la touche avancer.
    Pour le moment je teste simplement avec un cercle que je redessine pour les mouvement, plus tard se sera autre chose.
    Voilà ce que j'ai fait :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    package jeu;
     
    import javafx.beans.binding.BooleanBinding;
    import javafx.beans.property.BooleanProperty;
    import javafx.beans.property.SimpleBooleanProperty;
    import javafx.event.EventHandler;
    import javafx.scene.Group;
    import javafx.scene.Parent;
    import javafx.scene.effect.Light;
    import javafx.scene.effect.Lighting;
    import javafx.scene.input.KeyCode;
    import javafx.scene.input.KeyEvent;
    import javafx.scene.paint.Color;
    import javafx.scene.shape.Circle;
     
    public class Heros extends Parent {
     
        public static Circle c;
        private int dx;
        private int dy;
        private int x;
        private int y;
        //private Image image;
        private Touche[] touches;
        /*KeyCode ta=touches[0].getKey();
         KeyCode tr=touches[0].getKey();
         KeyCode ts=touches[0].getKey();*/
        public boolean spacePressed = false;
        public boolean rightPressed = false;
        public boolean leftPressed = false;
     
        public Heros(Group root) {
     
            x = 300;
            y = 200;
     
            /*ImageIcon ii = new ImageIcon(this.getClass().getResource(craft));
             image = ii.getImage();*/
            /*while (Clavier.fin_config == false) {
     
            }*/
            c = new Circle();                                                       // Création d'un cercle
            c.setCenterX(x);                                                        // réglage de la position en X
            c.setCenterY(y);                                                        // réglage de la position en Y
            c.setRadius(20);                                                        // réglage de la taille
            c.setFill(Color.RED);                                                   // Colore l'interieur en Rouge
            c.setStroke(Color.RED);                                                 // réglage de la couleur de la bordure 
            c.setStrokeWidth(3);                                                    // réglage de l'epaisseur de la bordure 
            root.getChildren().add(c);                                              // ajoute le cercle au groupe
     
            final Light.Distant light = new Light.Distant();                        // Création d'un effet de lumiere
            light.setAzimuth(-135.0);
            final Lighting lighting = new Lighting();
            lighting.setLight(light);
            lighting.setSurfaceScale(9.0);
     
            c.setFocusTraversable(true);
            c.setOnKeyPressed(new EventHandler<KeyEvent>() {
     
                @Override
                public void handle(KeyEvent e) {
     
                    KeyCode key = e.getCode();
     
                    if (key == KeyCode.RIGHT) {
                        rightPressed = true;
                    }
     
                    if (key == KeyCode.LEFT) {
                        leftPressed = true;
                    }
     
                    if (key == KeyCode.SPACE) {
                        spacePressed = true;
                    }
     
                    if (rightPressed == true && spacePressed == true) {
                        y = y - 10;
                        c.setCenterY(y);
                        x = x + 5;
                        c.setCenterX(x);
                    } else if (rightPressed == true) {
                        x = x + 2;
                        c.setCenterX(x);
                    }
     
                    if (leftPressed == true && spacePressed == true) {
                        y = y - 10;
                        c.setCenterY(y);
                        x = x - 5;
                        c.setCenterX(x);
                    } else if (leftPressed == true) {
                        x = x - 5;
                        c.setCenterX(x);
     
                    }
     
                    if (spacePressed == true) {
                        y = y - 10;
                        c.setCenterY(y);
                    }
                }
            });
     
            c.setOnKeyReleased(new EventHandler<KeyEvent>() {
     
                @Override
                public void handle(KeyEvent e) {
                    KeyCode key = e.getCode();
     
                    if (key == KeyCode.RIGHT) {
                        rightPressed = false;
                    }
     
                    if (key == KeyCode.LEFT) {
                        leftPressed = false;
                    }
     
                    if (key == KeyCode.SPACE) {
                        spacePressed = false;
                    }
                }
            });
        }
     
        public int getX() {
            return x;
        }
     
        public int getY() {
            return y;
        }
     
        /* public Image getImage() {
         return image;
         }*/
    }
    Merci pour votre aide.
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Hum, je ne suis pas sur... AWT et Swing sont notoirement connus pour ne pas permettre d'avoir plusieurs saisies clavier en même temps (fut un temps on ne pouvait pas presser plus de 3 touches en même temps sous Swing sous Windows par exemple). Il me semble (mais ça remonte a très longtemps quand je me suis penché sur ce genre de problème) que certains ont été amené a devoir réécrire leur propre écouteur clavier en utilisant des gestionnaires d’évènements de bas niveau.
    J'ai peur que JavaFX ait hérité de la conception AWT/Swing sur ce domaine vu que ca a ete pense pour des applications desktop classiques qui ne prennent pas trop en compte les touches rémanentes.

    Il faudrait, je pense, aller voir sur les forums de Java-Gaming.org et poser la question (en anglais) la-bas, voir si qqun a eut le problème avec JavaFX, voir si une solution a été trouvée pour Swing/AWT et si elle est adaptable en FX (bien sur les classes de l'API de bas niveau de gestion des évènements ne sont pas les mêmes).
    Ça fait bien bien longtemps que je n'ai pas ete voir la-bas donc je ne sais pas si c'est un site toujours actif ou pas.

    C'est a peu près tout ce que je peux faire de mon cote je pense (a voir si qqun d'autre ajoute une réponse). Pense a nous mettre au courant par contre si tu trouves une solution de ton coté.
    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. [Math]problème multiplication double
    Par xso dans le forum Général Java
    Réponses: 29
    Dernier message: 04/12/2010, 15h04
  2. Probleme de KeyListener
    Par AfRo69 dans le forum Applets
    Réponses: 1
    Dernier message: 08/06/2007, 07h51
  3. Probleme de KeyListener
    Par Seb33300 dans le forum Interfaces Graphiques en Java
    Réponses: 11
    Dernier message: 05/02/2007, 12h48
  4. Problemes multiples avec "case à cocher"
    Par guidzit dans le forum Access
    Réponses: 13
    Dernier message: 21/09/2006, 14h46
  5. [Listener]probleme de KeyListener
    Par ehmppowa dans le forum Composants
    Réponses: 2
    Dernier message: 28/11/2005, 09h12

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