Je n'arrive pas a lancer la balle de mon jeu de ping pong
972apprenti
Messages postés18Date d'inscriptionsamedi 30 janvier 2010StatutMembreDernière intervention24 octobre 2011
-
15 oct. 2011 à 22:45
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 2012
-
6 nov. 2011 à 21:37
Bonjour à tous, je ne suis que débutant dans la programmation, notamment en java, je me suis lancer dans la création d'un jeu de pingpong, j'ai réussi à faire la boucle pour le déplacement de la balle, j'ai voulu mettre un menu afin que l'utilisateur puisse décider du moment ou la balle pourra partir, et c'est la que ce pose mon problème: la balle ne défile pas mais la boucle a bien démarré car je peu vérifier les résultat avec la console, l'aspect graphique demeure bloquer, je ne peux même pas fermer la fenêtre, ou changer de menu, je ne sais pas d’où viens le problème, s'il vous plaît aider moi.
Voici mon code:
import java.awt.Dimension;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
public class Fenetre extends JFrame {
private Panneau pan = new Panneau();
private JMenu file = new JMenu("File");
private JMenuItem Go = new JMenuItem ("Go!");
private JMenuItem Stop = new JMenuItem ("Stop");
private JMenuBar mb = new JMenuBar();
public Fenetre(){
file.add(Go);
Go.setMnemonic(KeyEvent.VK_G);
Go.setIcon(new ImageIcon(getClass().getResource("play.gif")));
file.add(Stop);
Stop.setMnemonic(KeyEvent.VK_S);
Stop.setIcon(new ImageIcon(getClass().getResource("pause.gif")));
mb.add(file);
this.setTitle("PingPong");
this.setSize(300, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setJMenuBar(mb);
this.setContentPane(pan);
this.setVisible(true);
Go.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
go();
}
});
}
public void go(){
Boolean Run=true;
System.out.println("lancement de la fonction");
boolean droite= true;
/*Les x diminuent on vas vers la droite*/
boolean bas= true;
/*Les y diminuent mais on va vers le haut dans le repere dans le repère de la fenetre*/
int maxx=this.getWidth()-50;
int minx=0;
int maxy=this.getHeight()-50;
int miny=0;
while(Run ==true)
{
System.out.println("Haut de la boucle");
int x pan.getPosX(), y pan.getPosY();
if(droite)
{
x=x+2;
if(x>maxx)droite=false;
}
else
{
x=x-2;
if(x<minx)droite=true;
}
if(bas)
{
y=y-3;
if(y<miny)bas=false;
}
else
{
y=y+3;
if(y>maxy)bas=true;
}
System.out.println("("+x+";"+y+")");
pan.setPosX(x);
pan.setPosY(y);
pan.repaint();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
A voir également:
Je n'arrive pas a lancer la balle de mon jeu de ping pong
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020371 17 oct. 2011 à 10:31
Bonjour,
Je pense que tu as oublié de mettre un setLayout(null) dans ta fenetre.
Deux remarques, essayes de respecter les conventions de nommage en java, tu seras plus facile à lire. Et au lieu de réinventer la poudre avec ta méthode go(), implémente l'interface runnable et remplaces go par run, tu pourras ainsi exécuter ton jeu dans un autre thread que le thread courant.
972apprenti
Messages postés18Date d'inscriptionsamedi 30 janvier 2010StatutMembreDernière intervention24 octobre 2011 24 oct. 2011 à 22:35
Merci, cela m'as bcp aidé, mais je suis à nouveau bloqué, je voudrais déplacer un petit rectangle qui servivera de raquette pour ma balle de ping pong, le problème c'est que je n'arrives pas à mettre les touches directionnelles en écoute, j'ai beau copier des script supposé correcte, ça ne marche pas.
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020371 25 oct. 2011 à 07:55
Il faut que tu utilises un keyListener et que tu fasses un switch sur la source pour récupérer la bonne touche, je pense que c'est ce que tu as trouvé sur internet.
Le problème est que ton keyListener est associé a un composant qui doit avoir le focus (requestFocusInWindow()) pour que le listener soit activé.
Juste par curiosité, montre moi ton code que je vois si tu as un soucis.