Partage
  • Partager sur Facebook
  • Partager sur Twitter

Cliquer pour continuer

Sujet résolu
    18 septembre 2017 à 18:30:15

    Bonjour,

    Je travaille actuellement sur un petit projet de jeu vidéo et je bloque sur cette question : comment faire pour afficher un message à l'écran et mettre l'application en pause en attendant que l'utilisateur clique ?

    Afficher un message et le faire disparaître c'est plutôt facile mais MouseMotionListener et ActionListener restent actifs et c'est ça qui me dérange.

    Merci d'avance pour votre aide !

    • Partager sur Facebook
    • Partager sur Twitter
      18 septembre 2017 à 18:40:33

      Bonjour

      Je ne connais pas grand chose aux jeux videos en java mais tu ne peux pas mettre un booleen et tu check s'il est true ou false et tu désactive/ active ActionListener et MouseMotionListener ?

      Mathieu

      • Partager sur Facebook
      • Partager sur Twitter
      "Le plus court chemin d'un point A à un point B : c'est de ne pas y aller"
        18 septembre 2017 à 18:51:37

        J'y ai pensé mais du coup ça veut dire que je dois rajouter une condition à toutes les méthodes de MouseListener et à mon ActionPerformed, et ça dans toutes les classes ou je souhaite afficher ce genre de message. Bon c'est faisable mais je trouvais ça un peu brouillon et je me demandais s'il n'y a pas moyen de faire quelque chose d'un peu plus propre.

        Merci malgré tout pour ta réponse ;)

        • Partager sur Facebook
        • Partager sur Twitter
          18 septembre 2017 à 19:32:17


          Personnellement (je persiste ...;) ), je ferais un :

          public boolean getTonBool(){
          return TonBool;
          }

          Comme ça pas besoin de te faire ch*** avec des if de partout.

          • Partager sur Facebook
          • Partager sur Twitter
          "Le plus court chemin d'un point A à un point B : c'est de ne pas y aller"
            18 septembre 2017 à 23:04:02

            Euh, ca depend de beaucoup de chose ! Si c'est un jeu video un peu evolue tu devrais avoir plusieurs Thread, si cette notion t'echape evite tout ce qui est animation, son et jeu en reseau ^^, si ton jeu tourne sur son propre thread le fait de ne plus s'occuper des listeners ne changera pas le rafraichissement de ton jeu, le temps virtuel qui s'ecoule, les animations etc.

            Tu peux tester les JOptionPane, qui peuvent mettre ta fenetre principale en pause pour faire au plus simple. Mais ca depend vraiment de ton jeu, et de comment tu as code le tout !

            Si tu veux pas mettre de conditions a ton action performed etc sinon tu change de Panel principal, et tu implemente tes listeners uniquement sur ta fenetre de jeu ;), ou sinon tu fait des if(paused) event.consume(); (sauf pour ta touche ou ton event qui sort le jeu de ta pause !

            • Partager sur Facebook
            • Partager sur Twitter
            @autor VinYarD
              19 septembre 2017 à 10:26:23

              Effectivement j'ai vu un peu quelques trucs sur le fait d'avoir plusieurs threads mais ça avait l'air assez compliqué au premier abord. Je me demande si je vais pas travailler un peu le sujet.

              Les JOptionPane c'est facile et rapide à utiliser mais on est vite limité (pas possible de les customiser vraiment).

              Changer de panel principal je suis pas convaincu, du coup j'aurais plus aucun affichage en arrière-plan je pense ? Je comprends pas trop le event.consume() par contre :/

              Dans tout les cas j'ai trouvé une solution qui marche en ajoutant un booléen qui sert de flag et des conditions sur mes listeners mais je pense que le fait d'avoir plusieurs thread me donnerait un meilleur résultat.

              Merci pour tes conseils.

              • Partager sur Facebook
              • Partager sur Twitter
                22 septembre 2017 à 18:38:10

                Si tu as plusieurs Thread tu va complexifier un peu ton code si jamais tu n'en a jamais manipule avant entraine toi sur un autre projet je pense.

                Si tu peux tout a faire creer ton propre JOptionPane, ou alors lui fournir ton propre JPanel a l'interieur, donc customiser entierement son contenu et c'est du coup tres simple a faire.

                Je suis d'accord que c'etait pas evident a deviner que c'est possible, car le parametre est de type Object message, mais toute classe java est de type Object, JPanel aussi donc. 

                public static int showConfirmDialog(Component parentComponent,
                                    Object message,
                                    String title,
                                    int optionType,
                                    int messageType,
                                    Icon icon)
                                             throws HeadlessException

                Tu peux tout a fait l'instancier avec ton propre panel comme ceci donc :

                JOptionPane.showConfirmDialog(null,
                                new JPanel(),
                                "JOptionPane Example : ",
                                JOptionPane.OK_CANCEL_OPTION,
                                JOptionPane.PLAIN_MESSAGE);n

                C'est la solution la plus simple pour un debutant, mais apres c'est pas forcement la plus jolie pour un jeux. Sinon le event.consume(); si tu le met avant les trucs que tu ne veux pas traiter en pause (if(paused) event.consume()) va tout simplement ignorer (consumer) l'event et ne pas le traiter.

                Tu peux aussi bien faire un truc du style TonControlerDeJeux.removeActionListenr(..) etc, tu peux aussi foutre un truc au premier plan par dessus qui va intercepter les event avant, mais c'est pas possible partout, ca depend de ton implementation de base etc, y a 1000 facon de le faire mais aussi 1000 cas d'implementation differentes de ton jeu, qui feront que toutes les solutions ne sont pas bonne pour ton implementation.

                Enfin bref, probleme complexe et je ne saurais t'aider au mieux sans jeter un oeil a ton programme.


                • Partager sur Facebook
                • Partager sur Twitter
                @autor VinYarD

                Cliquer pour continuer

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown