Problème de lag pour un jeu

Problème de lag pour un jeu - Java - Programmation

Marsh Posté le 05-07-2006 à 18:01:46    

Bonjour tout le monde, je vous expose mon problème :
 
Je suis actuellement en train de faire un jeu simple, le principe est le suivant : au lancement du jeu, une JFrame apparaît de manière aléatoire toutes les 2s(le temps diminuera quand j'aurais réglé mon problème) et il faut cliquer dessus, cependant, lors du lancement, cette JFrame fait laguer toutes les autres fenêtres donc impossible d'arrêter l'application à part un ctrl+alt+suppr(et encore, je dois m'acharner) sauf quand je suis sous Eclipse, j'arrive encore à l'arrêter à 2s d'intervalle. Bien évidemment, je n'ai pas ce problème si je ne mets pas la boucle qui fait apparaître ma JFrame.
J'ai cherché comment résoudre mon problème mais je ne trouve pas, je pense qu'il faut gérer des threads mais comme j'en ai jamais utilisé, je galère un peu là. Voici le code source :
 

Code :
  1. public void clic() {
  2.  JFrame fin = new JFrame("Options du jeu" );
  3.  fin.setUndecorated(true);
  4.  fin.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
  5.  fin.setLayout(new GridLayout(1, 3));
  6.  JButton finJeu = arrete();
  7.  JButton debutJeu = demarre();
  8.  fin.add(debutJeu);
  9.  fin.add(finJeu);
  10.  fin.add(jtf);
  11.  fin.setLocation(850, 0);
  12.  fin.setPreferredSize(new Dimension(300, 70));
  13.  fin.pack();
  14.  fin.setVisible(true);
  15. }
  16. public JButton arrete() {
  17.  JButton jrb = new JButton("Stop" );
  18.  jrb.addActionListener(new ActionListener() {
  19.   public void actionPerformed(ActionEvent ae) {
  20.    stop = true;
  21.   }
  22.     });
  23.     return jrb;
  24. }
  25. public JButton demarre() {
  26.  JButton jrb = new JButton("Go" );
  27.  jrb.addActionListener(new ActionListener() {
  28.   public void actionPerformed(ActionEvent ae) {
  29.    touche = 0;
  30.    stop = false;
  31.    JFrame attrape = new JFrame();
  32.    toucheCarre touche = new toucheCarre();
  33.    attrape.addMouseListener(touche);
  34.    attrape.setUndecorated(true);
  35.    attrape.setPreferredSize(new Dimension(30, 30));
  36.    attrape.setBackground(Color.RED);
  37.    while(stop == false) { //Le problème est ici
  38.     attrape.setBackground(Color.RED);
  39.     attrape.setLocation((int)(Math.random()*1000), (int)(Math.random()*1000));
  40.     attrape.pack();
  41.     attrape.setVisible(true);
  42.     try {
  43.      sleep(4000);
  44.     } catch (InterruptedException e) {
  45.      e.printStackTrace();
  46.     }
  47.    }
  48.   }
  49.     });
  50.     return jrb;
  51. }


 
Merci d'avance pour vos réponses.


Message édité par Chidori le 05-07-2006 à 18:36:18
Reply

Marsh Posté le 05-07-2006 à 18:01:46   

Reply

Marsh Posté le 05-07-2006 à 23:13:26    

pour faire un thread c'est simple
 
faut que la classe dérive de Thread
Cette classe doit posséder une méthode run
 
public void run()
 
ensuite pour lancé le Thread
maClass.Start();
 
et c'est parti ;-)
 
donc suffit de créer une nouvelle classe contenant ta boucle et c'est bon, bien entendu tu peux passer des références au constructeur de ta classe dérivant de thread afin de pouvoir jouer sur les composants graphiques. Voila tu devrais avoir tout ce qu'il te faut...

Reply

Marsh Posté le 05-07-2006 à 23:14:54    

implements Runnable hein :o


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 05-07-2006 à 23:25:05    

Merci de vos réponses, j'essaierais dès que possible et je vous tiens au courant. Par contre, j'extends déjà en Thread mais je voyais pas trop comment le gérer à part la méthode sleep().


Message édité par Chidori le 05-07-2006 à 23:28:21
Reply

Marsh Posté le 05-07-2006 à 23:50:25    

Bon voilà une capture du menu du jeu, ça fait exactement pareil que ce que je vous avez dit : http://img275.imageshack.us/img275/6228/jeu2ej.jpg
 
J'ai essayé 2 façons au cas où, maClasse extends Thread implements Runnable avec le morceau de code au-dessus et le start() dans la méthode clic() puis appel à cette méthode pour lancer le jeu et l'autre façon avec la même en-tête mais ma boucle dans le constructeur et lancement avec maClass.start().
Dans le 2nd cas, on voit même pas les options du jeu.
J'ai ma JFrame qui bouge aléatoirement comme ça l'était initialement mais j'ai toujours pas accès à mon menu de jeu, il reste bloqué et impossible de cliquer dessus.


Message édité par Chidori le 05-07-2006 à 23:51:14
Reply

Marsh Posté le 11-07-2006 à 20:55:08    

Un petit up comme je ne vois toujours pas de réponse.
 
En attendant, j'ai crée un autre jeu lol, un jeu de mémoire et j'ai le même problème, apparemment ça viendrait de la fonction sleep(). Lorsque je l'utilise, l'affichage se fige tant que la durée en paramètre n'est pas écoulée et malheureusement, dans mon premier jeu, cette fonction est dans une boucle while qui s'arrête quand je clique sur Stop mais comme je ne peux pas cliquer dessus... Voilà, j'espère avoir d'autres réponses.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed