Bonjour,
j'ai créé un robot qui se déplace sur un axe x,y avec un angle.J'ai ensuite créé une interface pour afficher ses mouvement en chiffres. Et dernièrement, j'ai ajouté une fenêtre ou un carré(classe box) qui hérite de la classe rectangle et doit pouvoir bouger en appuyant sur les boutons de mon interface de base.
Cela fonctionnait (bien qu'encore quelques déplacements étaient bizarres). Et d'un coup, sans savoir pourquoi le carré l'appuie sur la touche déplacement, disprait. Je suppose que soit:le repaint est mauvais,soit il se déplace tellement loin d'un coup qu'il sort de la fenêtre.
Je vous link le code, et les images des fenêtres.
L'image des fenêtres:
Dans mon Interface, dans le constructeur
Ma classe déplacement qui affiche le carré vert:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 setTitle("Contrôle du robot"); Robot robot1 = new Robot(new Point(0,0),0,0,false); Deplacement move = new Deplacement();
Ma méthode de déplacement du robot dans la classe Robot:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 public class Deplacement extends JFrame{ Image image; Graphics graphics; Box robot; public Deplacement() { robot = new Box(200,200,30,30,Color.green,0); this.setDefaultCloseOperation(this.EXIT_ON_CLOSE); this.setSize(500, 500); this.setVisible(true); this.setBackground(Color.cyan); } public void paint(Graphics g) { image = createImage(this.getWidth(),this.getHeight()); graphics = image.getGraphics(); g.drawImage(image,0,0,this); robot.draw(g); } }
A la suite de la réparation voulue, c'est à dire que le carré ne disparaissent plus. Je pense afficher les coordonnées de la box dans la fenêtre dans mes zones de texte et pas des valeurs partants du point 0,0 d'un axe x,y.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 public boolean marcher(int _sens,Deplacement _move) { double posX = this.pos.getX(); double posY = this.pos.getY(); double moveCos = Math.cos(this.angle*Math.PI/180); double moveSin = Math.sin(this.angle*Math.PI/180); if(this.estOn) { if (_sens>0) { this.pos.setX((int) (Math.round((posX + this.vitesse*moveCos)*100.00)/100.00)); this.pos.setY((int) (Math.round((posY + this.vitesse*moveSin)*100.00)/100.00)); _move.robot.x = this.pos.setX((int) (Math.round((posX + this.vitesse*moveCos)*100.00)/100.00)); _move.robot.y = this.pos.setY((int) (Math.round((posX + this.vitesse*moveSin)*100.00)/100.00)); _move.repaint(); return true; } else if (_sens<0) { this.pos.setX((int) (posX- Math.round(this.vitesse*moveCos*100.00)/100.00)); this.pos.setY((int) (posX- Math.round(this.vitesse*moveSin*100.00)/100.00)); _move.robot.x = this.pos.setX((int) (Math.round((posX - this.vitesse*moveCos)*100.00)/100.00)); _move.robot.y = this.pos.setX((int) (Math.round((posX - this.vitesse*moveSin)*100.00)/100.00)); _move.repaint(); return true; } } else { return false; } return true; }
A vous ...
PS: je viens de penser que peut être que le problème vienne des cast de double en int dans la méthode marcher du robot.
Partager