Bonjour,
je programme avec des amis un petit jeu en temps réel
pour exposer notre problème voici un résumé simpliste des classes concernées
attributs de la classe Menu (extends JPanel) : JButton boutonSoldat, boutonVehicule;
méthodes de la classe Formateur :
Citation :
public void entrainerSoldat() {
menu.boutonSoldat.setText("En formation" );
try{
Thread.sleep(500);
}catch (Exception e){}
menu.boutonSoldat.setText("Créer Soldat ?" );
}
public void entrainerVehicule(){
menu.boutonSoldat.setText("En Construction" );
try{
Thread.sleep(1000);
}catch (Exception e){}
menu.boutonSoldat.setText("Créer véhicule ?" );
}
|
dans le constructeur de la classe Controle (qui a comme attribut un Menu):
Citation :
boutonSoldat.addMouseListener(new MouseAdapter(){
public void MouseReleased(MouseEvent e) {
formateur.entrainerSoldat();
joueur.ajouter(new Soldat());
});
boutonChar.addMouseListener(new MouseAdapter(){
public void MouseReleased(MouseEvent e) {
formateur.entrainerVehicule();
joueur.ajouter(new Vehicule());
});
|
classe Joueur : liste des soldats et des véhicules
vous l'aurez compris, le clic sur l'un des boutons permet de construire un soldat ou un véhicule après un certain temps d'attente. Ceci a pour but d'attendre la fin de la formation d'un soldat avant de l'ajouter au jeu, comme dans tout jeu de stratégie. Cela fonctionne. Problème : pendant cette attente on ne peut pas cliquer sur les autres boutons ! Le bouton Soldat reste enfoncé (car l'attente commence dans la méthode MouseReleased()), le controle est en quelque sorte bloqué par cette attente et n'est plus à l'écoute des autres clics. Il faudrait que le programme se découpe en 2 parties, l'une qui s'occupe des actions à faire après l'attente et l'autre qui reste attentive aux clics de souris. Quelle solution peut on adopter ?
De plus, les setText() sur les boutons n'ont pas d'effet, plus exactement on ne peut pas faire de repaint() sur le menu pendant l'attente.
Message édité par mic-chan le 22-02-2008 à 17:46:14