Objet mal dimensionné
FerméLumberjack33 Messages postés 8 Date d'inscription samedi 31 décembre 2022 Statut Membre Dernière intervention 31 décembre 2022 - 31 déc. 2022 à 12:16
- Objet mal dimensionné
- Vente objet occasion entre particulier - Guide
- Impossible d'effectuer l'opération l'objet ayant été supprimé - Forum Outlook
- Identifier un objet à partir d'une photo - Guide
- La méthode range de l'objet _global a échoué ✓ - Forum VB / VBA
- Objet interdit en cabine ryanair - Guide
2 réponses
28 déc. 2022 à 13:01
Bonjour,
Ton code est incomplet, il y a un certain nombre de classes/interfaces non standards que tu utilises et que tu ne nous donnes pas, du coup il est impossible de tester ton code pour essayer de déboguer.
Il manque : Dessinable, Selectionnable, Vecteur2D, MoteurPhysique et quelques méthodes de Brique
Je te conseillerais d'essayer d'être le plus standard possible et d'utiliser un maximum les classes fournies par Java, par exemple ta classe Vecteur2D pourrait sûrement être remplacée par la classe java.awt.geom.Point2D
31 déc. 2022 à 12:16
à tester , mais ton code n'est pas complet :
Voici comment je suggère de modifier le code afin que la brique ait une largeur de 1 mètre et que cela occupe environ 1/5 de la largeur du composant, et afin que la brique soit un carré de 45 centimètres de côté :
public class Brique implements Dessinable, Selectionnable { private double masseEnKg = 1; private Rectangle2D.Double carreMuret; private Shape carreT; private Color couleur; private double largeur = 0.45; // Modifié pour être en mètres plutôt qu'en centimètres private double hauteur = 0.45; // Modifié pour être en mètres plutôt qu'en centimètres private Vecteur2D position; private Vecteur2D vitesse = new Vecteur2D(0,0); //par defaut private Vecteur2D accel = new Vecteur2D(0,0); //par defaut private double pixelsParMetre=20; // Modifié pour que chaque mètre occupe 20 pixels private Vecteur2D gravF = MoteurPhysique.calculForceGrav(masseEnKg); private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); public void addPropertyChangeListener(PropertyChangeListener listener) { this.pcs.addPropertyChangeListener(listener); } public Brique(Vecteur2D position, double largeur, double hauteur, Color couleur) { this.position = new Vecteur2D(position); this.largeur = largeur; this.hauteur = hauteur; this.couleur = couleur; creerLaGeometrie(); } private void creerLaGeometrie() { carreMuret = new Rectangle2D.Double(position.x, position.y, largeur, hauteur); this.pcs.firePropertyChange("position", "?", this.position); this.pcs.firePropertyChange("acceleration", -1, this.accel); this.pcs.firePropertyChange("vitesse", -1, this.vitesse); this.pcs.firePropertyChange("forceGrav", -1, this.gravF); } @Override public void dessiner(Graphics2D g2d) { Graphics2D g2dCopie = (Graphics2D) g2d.create(); AffineTransform mat = new AffineTransform(); mat.scale(pixelsParMetre, pixelsParMetre); carreT = mat.createTransformedShape(carreMuret); g2dCopie.setColor(this.couleur); g2dCopie.fill(carreT); g2dCopie.setColor(Color.BLACK); g2dCopie.draw( carreT); } } //creation du Muret a partir de briques public class Muret extends Brique { public Muret(Vecteur2D position, double largeur, double hauteur, Color couleur) { super(position, largeur, hauteur, couleur); } private List<Brique> briques; public void setBriques(List<Brique> briques) { this.briques = briques; } } public class ZoneAnimationPhysique extends JPanel implements Runnable { private static final long serialVersionUID = 1L; private double largeurDuComposant = 500; private double hauteurDuComposant = 500; private MoteurPhysique moteur; private List<Dessinable> dessinables; private JSpinner spinnerLargMuret; private JSpinner spinnerHautMuret; private JSpinner spinnerNbBriques; private JSpinner spinnerMasseMuret; private JButton btnLancer; public ZoneAnimationPhysique() { setPreferredSize(new Dimension((int) largeurDuComposant, (int) hauteurDuComposant)); moteur = new MoteurPhysique(new Vecteur2D(0, -9.81)); moteur.setDessinables(dessinables); setLayout(new BorderLayout()); JPanel panneauControles = new JPanel(); panneauControles.setLayout(new GridLayout(2, 4)); panneauControles.add(new JLabel("Largeur du Muret en m")); SpinnerModel modelLargMuret = new SpinnerNumberModel(0.45, 0.1, 5.0, 0.1); // Modifié pour être en mètres plutôt qu'en centimètres spinnerLargMuret = new JSpinner(modelLargMuret); panneauControles.add(spinnerLargMuret); panneauControles.add(new JLabel("Hauteur du Muret en m")); SpinnerModel modelHautMuret = new SpinnerNumberModel(0.45, 0.1, 5.0, 0.1); // Modifié pour être en mètres plutôt qu'en centimètres spinnerHautMuret = new JSpinner(modelHautMuret); panneauControles.add(spinnerHautMuret); panneauControles.add(new JLabel("Nombre de briques")); SpinnerModel modelNbBriques = new SpinnerNumberModel(3, 1, 50, 1); spinnerNbBriques = new JSpinner(modelNbBriques); panneauControles.add(spinnerNbBriques); panneauControles.add(new JLabel("Masse du Muret en kg")); SpinnerModel modelMasseMuret = new SpinnerNumberModel(1, 1, 50, 1); spinnerMasseMuret = new JSpinner(modelMasseMuret); panneauControles.add(spinnerMasseMuret); add(panneauControles, BorderLayout.NORTH); btnLancer = new JButton("Lancer"); add(btnLancer, BorderLayout.SOUTH); btnLancer.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { lancer(); } }); } private void lancer() { double largMuret = (double) spinnerLargMuret.getValue(); double hautMuret = (double) spinnerHautMuret.getValue(); int nbBriques = (int) spinnerNbBriques.getValue(); double masseMuret = (double) spinnerMasseMuret.getValue(); Muret muret = new Muret(new Vecteur2D(0.5, 0.9), largMuret, hautMuret, Color.RED); muret.setMasse(masseMuret); List<Brique> briques = muret.creerBriques(nbBriques); muret.setBriques(briques); dessinables.add(muret); for (Brique brique : briques) { dessinables.add(brique); } moteur.setDessinables(dessinables); Thread thread = new Thread(this); thread.start(); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; for (Dessinable dessinable : dessinables) { dessinable.dessiner(g2d); } } @Override public void run() { while (true) { moteur.calculerDeplacementsEtCollisions(0.1); repaint(); try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } } }