CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Recherche specialiste Java

padpololo
padpololo
Niveau 7
26 février 2006 à 19:11:33

Bonjour,

Je fais un projet a l´université et j ai un petit probleme. Les profs n´ont pas trouvé la solution donc je recherche quelqu´un de callé en interface graphique et en evenement.

Grosso modo j´ai un petit robot qui se deplace d un point A a un point B de facon progressive (appelle de la fonction repaint dans une boucle).
Tout ce passe bien quand le robot se deplace par lui meme, cependant quand je fais intervenir les evenement clavier pour choisir l´action du robot celui ci ne se deplace plus progressivement. En effet il est au point A et pouf il apparait au point B. J´ai l´impression que la boucle est executé derriere mais que le repaint n´est plus executé. Cependant il est bien affiché en B a la fin.

Si quelqu´un peut m aider je lui en serais reconnaissant. Le plus simple serait que j´envoi par mail ma source avec une explication detaillé. je laisse mon mail pour cela.

Plz plz help me .

olivierlolo@hotmail.com

padpololo
padpololo
Niveau 7
26 février 2006 à 19:25:23

voila ou se situe le probleme.

L´evenement clavier execute ce bout de code

public void allerGauche(){
double init;
init=posX;
while(ECART+posX*TAILLECASE+TAILLECASE/4>= ECART+(init-1)*TAILLECASE+TAILLECASE/4){
posX-=0.01;
fenRobot.repaint();
dormir(5);/*methode pour faire une pause*/
}
}

Ca marche sans probleme sans les evenements. C´est a dire que le robot se deplace progressivement grace a l´appelle de la fonction repaint. fenRobot extends JFrame.

Des qu´il y a les evenements ca ne marche plus et cela vient du fait que la methode repaint ne s´execute pas parce que quand je mets dormir(1000) ca met 2 min pour m´afficher le resultat final c´est a dire la position du robot en B.

Aidez moi plz

dnob700
dnob700
Niveau 10
26 février 2006 à 19:34:24

mais la bonne réponse se situe peut-être entre les deux non ?

avec dormir(5) peut-être que tout vas trop vite, et qu´il passe bien par les position intermédiaire, mais que tu n´as pas le temps de le voir non ?

il faudrait que tu montre plus de code pour qu´on puisse voir comment ça marche.

padpololo
padpololo
Niveau 7
26 février 2006 à 19:49:40

ba avec dormir(5) et sans les evenement ca marche trés bien. Merci quand meme d´avoir pris le temps de lire mes deux posts.

en fait le code que j´ai deja ecri se situe dans une class Robot.

Sinon je vous post ma classe qui herite de key adapter.

class RobotListener extends KeyAdapter implements Cons {

Robot robotEc;
RobotListener(Robot r){
robotEc = r;
}

/*Constantes*/
public static final int HAUT=0;
public static final int GAUCHE=1;
public static final int BAS=2;
public static final int DROITE=3;

public void keyPressed(KeyEvent e){
int code = e.getKeyChar();
switch (code){
case ´a´:robotEc.avancer();break;
case ´g´:robotEc.tournerGauche();break;
case ´d´:robotEc.tournerDroite();break;

case
´8´:robotEc.setDirection(HAUT);robotEc.avancer();b
reak;
case
´4´:robotEc.setDirection(GAUCHE);robotEc.avancer()
;break;
case
´5´:robotEc.setDirection(BAS);robotEc.avancer();br
eak;
case
´6´:robotEc.setDirection(DROITE);robotEc.avancer()
;
}
}

La methodes avancer() fait appelle a la methode alleGauche() (2ieme post) si le robot a comme direction gauche.

godrik
godrik
Niveau 30
26 février 2006 à 19:59:30

le problème n´est bien évidement pas la...
appeler la fonciton repaint place un evenement dans la boucle d´evenement.
cette boucle est lue par le thread AWT. C´est le meme thread que le thread courant, le message d´affichage n´est donc traiter qu´a la fin de ta boucle.
pour faire ce que tu vuex, il te faut:
-utiliser un thread externe
-utiliser un timer

padpololo
padpololo
Niveau 7
26 février 2006 à 20:18:45

Je n´ai jamais utilisé les multi thread mais je vois a peu pres de quoi tu veux parler. C´est pour executer 2 processus en meme temps d´apres ce que j´ai cru entendre.

Par contre pourrait tu etre plus precis concernant le timer.

C´est bizare que mes profs n ai pas su me repondre si c´est le cas huhu. Vraiment des quiches!! huhu

godrik
godrik
Niveau 30
26 février 2006 à 23:17:23

pour le timer: java.sun.com ->api specification ->Timer

tu n´execute pas deux processus en meme temps, tu execute deux threads. les processus n´ont pas d´espace d´adressge commun.
pour plus d´info:
http://www.mandragor.org/article.php?id=7
ou google multi-threading java

padpololo
padpololo
Niveau 7
27 février 2006 à 00:10:23

Je te remercie beaucoup je regarderais ca demain soir.

J ai resolu effectivement mon probleme avec les multi thread en faisant heriter ma classe robot de thread avec la methode run(). cependant je n´ai pas reussi a mettre en pause le processus sans suspend() et resume() donc c´est la merde.
J´arrive pas a faire fonctionner interrupt() et de plus je ne peux utiliser de timer sachant que le thread est en pause tant qu´il n´y a pas d´action au clavier.

Je regarderais ca demain soir mais merci encore.++

butagaz
butagaz
Niveau 9
28 février 2006 à 23:56:09

Ma petite expérience me dit que le multithreading pour l´animation, c´est vraiment à chier. Fais comme tout le monde update tout dans une boucle principale.
C´est vrai que le multithreading a l´air très élégant mais pour des applications où la synchronisation est cruciale (comme l´animation), je crois que c´est vraiment pas la bonne solution.
Enfin, je suis débutant donc il y a de fortes chances que je me plante.

JeanYvesYves
JeanYvesYves
Niveau 10
01 mars 2006 à 01:40:12

butagaz > Entierement d´accord avec toi :), absolument bannir le multithreading s´il n´est pas nécessaire.

Le multithreading, meme avec la meilleur volonté du monde, peut ralentir un programme :
un exemple :
Pour des raisons de sureté, on utilise des "Mutex" (= verrous) qui protegent des variables pour pas que 2 threads accedent simultanément a la meme variable (critique et imprévisible). Quand un thread rencontre un mutex, il attend...

pour l´animation, il est mieux d´etre séquentiel.
Un bon squelette de jeu video est le suivant :

while(!game_over())
{
Update_le_joystick();
calcule_les_deplacements_et_collisions();
affiche();
}

godrik
godrik
Niveau 30
01 mars 2006 à 15:30:24

malheurement en java on a pas le choix.
l´iinterfacage graphique par AWT impose un thread de traitement des messages

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment