Pb saisie jeu !!

joduak Messages postés 194 Date d'inscription lundi 11 juillet 2005 Statut Membre Dernière intervention 13 avril 2007 - 28 avril 2006 à 18:24
joduak Messages postés 194 Date d'inscription lundi 11 juillet 2005 Statut Membre Dernière intervention 13 avril 2007 - 29 avril 2006 à 20:17
Salut!


Voilà je développe un jeu de plateau, et j'ai un problème au niveau des commandes de déplacements des personnages.

Si par exemple 2 joueurs jouent sur le même clavier et que ces 2
joueurs appuient sur la touche de déplacement haut de leur personnage
pendant 5 secondes (exemple) il n'y a qu'un personnage qui va se
déplacer sur le plateau, l'autre étant bloqué!!


La saisie des touches se fait avec KeyPressed(e)...


Comment gérer cette simultanéité de déplacement ? Quelle fonction dois-je utiliser?


Merci de votre aide !

13 réponses

scaryman Messages postés 492 Date d'inscription vendredi 30 janvier 2004 Statut Membre Dernière intervention 16 mai 2007 12
28 avril 2006 à 19:12
Salut
Utilises-tu un thread par joueur?
Sinon, je pense qu'il faudra synchroniser l'affichage par les 2 threads.

Voila
A++
0
joduak Messages postés 194 Date d'inscription lundi 11 juillet 2005 Statut Membre Dernière intervention 13 avril 2007
28 avril 2006 à 20:20
Non je n'utilise pas un thread par joueur...


Je ne vois pas comment créer un thread par joueur pour la saisie, aurais tu un exemple ?
0
joduak Messages postés 194 Date d'inscription lundi 11 juillet 2005 Statut Membre Dernière intervention 13 avril 2007
29 avril 2006 à 14:09
Que veux tu dire par un thread par joueur? c'est un keylistener par joueur?
0
Aethan Messages postés 50 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 4 mai 2006
29 avril 2006 à 14:27
Je n'ai pas d'opinion dessus et la reponse m'interresse...

Mon site perso : www.artignan.jexiste.fr
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
scaryman Messages postés 492 Date d'inscription vendredi 30 janvier 2004 Statut Membre Dernière intervention 16 mai 2007 12
29 avril 2006 à 15:29
Re
Ben j'ai bien réfléchi à ton problème (qui m'intéresse aussi) et je me suis rendu compte que l'utilisation de plusieurs threads serait assez compliquée donc je me suis tourné vers une autre solution : au lieu d'utiliser en masse keyPressed, utiliser keyReleased :
1) créer une table
2) quand keyPressed recoit un événement, tu ajoutes la touche dans cette table
3) quand keyReleased recoit un événement, tu retires la touche de cette table
4) à chaque moment (avec un Thread), tu vérifies quelles touches sont inscrites dans la table et tu agis sur ton jeu en csq

N'hésites pas si tu ne comprends pas.

Voila
A++
0
Aethan Messages postés 50 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 4 mai 2006
29 avril 2006 à 15:37
C'est enorme !!!
Ca a l'air de marcher...

Felicitation scaryman
Aethan

Mon site perso : www.artignan.jexiste.fr
0
scaryman Messages postés 492 Date d'inscription vendredi 30 janvier 2004 Statut Membre Dernière intervention 16 mai 2007 12
29 avril 2006 à 17:09
Ah ben cool !!!
J'étais pas du tout sur que ca marcherait.

Chose à ajouter : dans le keyPressed, vérifier que le code de la touche n'est pas déjà présent !!!
0
Aethan Messages postés 50 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 4 mai 2006
29 avril 2006 à 17:13
Non en fait c pas moi qui ai posé la question mais
a vue de nez ca marche ton truc c ce que je voulais dire .
0
joduak Messages postés 194 Date d'inscription lundi 11 juillet 2005 Statut Membre Dernière intervention 13 avril 2007
29 avril 2006 à 17:38
Hey !


Il faut rendre à césar ce qui lui apparient ^^ (c'était ma question ! :) )

J'ai testé ta méthode, et j'ai stocké ds un Hashtable mes event.


Ma méthode run comprend donc un while(true) qui scrute tous les éléments du Hashtable.


Mes personnages se déplacent vite et même super vite et super trop vite si tu vois ce que je veux dire.


Donc dans mon while(true) j'ai ms un sleep(30) pour qu'à chaque exécution d'une action du hashtable le process soit en pause.


Le problème est que lorsque je déplace 2 personnages en même temps ça
rame un peu et quand il y en a 3 en même tps ça rame encore plus...


Comment éviter cette lenteur?


Merci pour ta belle idée!!


++


Jo
0
scaryman Messages postés 492 Date d'inscription vendredi 30 janvier 2004 Statut Membre Dernière intervention 16 mai 2007 12
29 avril 2006 à 18:11
As-tu mis 1 Thread par joueur ? (je ne sais pas si ca arrangerait le truc)
Sinon, montres-nous les bouts de code concernés.
0
Aethan Messages postés 50 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 4 mai 2006
29 avril 2006 à 19:09
mdr !!

tu peux aussi diminuer le sleep mais aussi diminuer le pas d'avancement tu y gagnera en fluidité...
0
joduak Messages postés 194 Date d'inscription lundi 11 juillet 2005 Statut Membre Dernière intervention 13 avril 2007
29 avril 2006 à 20:09
Dans le KeyPressed il y a juste un action_joueur.put(KeyEvent.getKeyText( e.getKeyCode() ) , mon_action);


et dans le KeyReleased juste un action_joueur.remove(KeyEvent.getKeyText( e.getKeyCode() ));


et mon run() c'est :


public void run()

    {

            while(processus)

            {

                Enumeration actions = action_joueur.elements();

               

                while(actions.hasMoreElements())

                {

                    try {

           
              String
code_action = ((String) actions.nextElement());


           
            //fction
d'action sur le jeu utilisant code_action

                       

           
           
Thread.sleep(30);

                    }

                    catch (Exception e) {}

                }

                affichage_jeu()

            }

    }


La vitesse de déplacement est bonne le seul problème c'est que ça "lag" quand 2 persos se déplacent en même temps...
0
joduak Messages postés 194 Date d'inscription lundi 11 juillet 2005 Statut Membre Dernière intervention 13 avril 2007
29 avril 2006 à 20:17
et c'est un seul thread qui boucle a l'infini.

le code_action est très bien traité dans la fonction et comprend le
numéro du joueur qui doit se déplacer ainsi que l'action à effectuer...


valà!

Si idée, moi preneur ;)
0
Rejoignez-nous