J'essaye de programmer un jeu, et j'ai commencé par essayé de relier deux points sur une JFrame avec une droite à l'aide de la souris, mais sa ne marche pas, rien ne s'affiche ou ne se dessine, sa fait des jours que j'essaye de trouver pourquoi mais je n'y arrive pas, peut être que vous pouvez m'aider ou m'orienter, voici le code que j'ai écris :
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.geom.*;
public class relierPoints {
public static void main(String args[]){
Fenetre principale = new Fenetre();
principale.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
principale.show();
}
}
class Fenetre extends JFrame {
private Panneau p;
public Fenetre() {
setSize(600, 600);
setLocation(100, 100);
setTitle("JEU SIM");
//barre de menu:
JMenuBar barremenu = new JMenuBar();
setJMenuBar(barremenu);
JMenu joueur = new JMenu("Jeu");
JMenuItem fermer = new JMenuItem("Fermer");
barremenu.add(joueur);
joueur.add(fermer);
fermer.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
}
);
addMouseListener(new souris());
Container contenu = getContentPane();
p = new Panneau ();
contenu.add(p,"Center");
p.repaint();
}
}
class Panneau extends JPanel {
int [] tab1= new int [6];
int [] tab2= new int [6];
public Panneau(){
tab1[0]=300; tab1[1]=400; tab1[2]=400; tab1[3]=300; tab1[4]=200; tab1[5]=200;
tab2[0]=100; tab2[1]=200; tab2[2]=300; tab2[3]=400; tab2[4]=300; tab2[5]=200;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 =(Graphics2D) g;
Rectangle2D rect1 =new Rectangle2D.Double(300,100,5,5);
Rectangle2D rect2 =new Rectangle2D.Double(400,200,5,5);
//Rectangle2D rect3 =new Rectangle2D.Double(400,300,5,5);
//Rectangle2D rect4 =new Rectangle2D.Double(300,400,5,5);
//Rectangle2D rect5 =new Rectangle2D.Double(200,300,5,5);
//Rectangle2D rect6 =new Rectangle2D.Double(200,200,5,5);
g2.draw(rect1);
g2.draw(rect2);
//g2.draw(rect3);
//g2.draw(rect4);
//g2.draw(rect5);
//g2.draw(rect6);
}
}
class souris extends MouseAdapter {
private int x1, x2, y1, y2, xx, yy;
private int SourisX, SourisY;
public void mouseUp(MouseEvent e){
xx = e.getX();
yy = e.getY();
System.out.println(xx);
System.out.println(yy);
//si je suis à l'interieur du 1er rectangle alors j'initialise x1 et y1 ou x2 et y2
if ((xx < 300+5+4) & (xx > 300+4) & (yy < 100+5+46) & (yy > 100+46)){
if ((x1 != 302+4) & (y1 != 102+46)) {
x2 = 302+4;
y2 = 102+46;
}
else {
x1 = 302+4;
y1 = 102+46;
}
}
else
// la même chose pour le 2eme rectangle
if ((xx < 400+5+4) & (xx > 400+4) & (yy < 200+5+46) & (yy > 200+46)){
if ((x1 != 402+4) & (y1 != 202+46)) {
x2 = 402+4;
y2 = 202+46;
}
else {
x1 = 402+4;
y1 = 202+46;
}
}
}
public void mouseMove(MouseEvent e){
SourisX = e.getX();
SourisY = e.getY();
//repaint();
}
public void paint(Graphics g) {
g.setColor(Color.RED);
//si (x1 , y1) et (x2 , y2) sont bein les coordonées des deux points alors je trace la droite
if (((x1 == 302+4) & (y1 == 102+46))
| ((x1 == 402+4) & (y1 == 202+46))) {
if (((x2 == 302+4) & (y2 == 102+46))
| ((x2 == 402+4) & (y2 == 202+46))) {
g.drawLine(x1, y1, x2, y2);
}
}
else {
//sinon je trace une droite qui n'abouti pas, elle suit seulement le curseur
g.drawLine(x1, y1, SourisX, SourisY);
}
}
}
Merci de m'aider d'avance
# si ca peut t'aider
Posté par TImaniac (site web personnel) . Évalué à 2.
Ensuite redéfini la méthode paint(graphics g) de ton JPanel, pas paintComponent. Pour finir je pense qu'il faut mieux ne pas mettre de gestionnaire de placement, cad mettre setLayout(null) dans ton JPanel. Par contre faudra peut être le resizer du coup.
N'hésite pas à faire des setBackground(Color.GREEN) pour voir si tes JPanel apparaîssent déjà bien dans le JFrame.
n'oublies pas d'ajouter ton JPanel au JFrame et de faire un pack() après.
[^] # Re: si ca peut t'aider
Posté par pifou . Évalué à 2.
Bref, même si c'est formateur de faire une petite appli de ses propres mimines, c'est embetant de perdre du temps sur des détails technoques comme cela (en plus c'est vraiment que le début, il y aura encore la gestion de chargement d'images (sprite), des doubles buffers et j'en passe).
Donc mon conseil (qui ne vaut pê pas grand chose) c'est de chercher sur Internet un petit moteur de jeux ou alors une bibliothèque plus haut niveau (comme SDL (J4sdl), DirectX, ou OpenGL (GLjava, Jogl)) pour faire ton jeu.
[^] # Re: si ca peut t'aider
Posté par TImaniac (site web personnel) . Évalué à 2.
A noter également qu'en prenant un autre API que Swing pour l'affichage, il va bien souvent devoir réinventer la roue, faute d'avoir des LayoutManager, des formes de base qui savent s'afficher, se redimensionner, etc.
Si c'est pour faire de la 3D, effectivement c'est peut-être pas top, mais si c'est pour faire de la 2D qui ne soit pas à base de sprite (on peut penser à tout ce qui est vectoriel), Swing est sans doute plus adapté que SDL ou autre OpenGL :)
# Suggestion
Posté par taldius . Évalué à 1.
[^] # Re: Suggestion
Posté par ryadus . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.