Mouvement de pièces d'échec
Bonjour, j'ai bien de la misère avec cette méthode. Je tente de sauvegarder dans la position de départ lorsque je clique sur une pièces dans un jeu d'échec. Il y a 3 Event dans cette méthode: node.setOnMousePressed ; node.setOnMouseDragged ; node.setOnMouseReleased. Mon but est de déplacer la pièce si la case est valide, sinon la remettre à sa position de départ.
Code:
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 34 35 36 37 38 39
| private void enableDragging(Node node) {
final ObjectProperty<Point2D> mouseAnchor = new SimpleObjectProperty<>();
final ObjectProperty<Point2D> mouseDown = new SimpleObjectProperty<>();
// Lorsque la pi�ce est saisie, on pr�serve la position de d�part
node.setOnMousePressed(event -> {
mouseAnchor.set(new Point2D(event.getSceneX(), event.getSceneY()));
mouseDown.set(new Point2D(event.getSceneX(), event.getSceneY()));
});
// � chaque �v�nement de d�placement, on d�place la pi�ce et on met �
// jour la position de d�part
node.setOnMouseDragged(event -> {
double deltaX = event.getSceneX() - mouseAnchor.get().getX();
double deltaY = event.getSceneY() - mouseAnchor.get().getY();
node.relocate(node.getLayoutX() + deltaX, node.getLayoutY() + deltaY);
node.toFront();
mouseAnchor.set(new Point2D(event.getSceneX(), event.getSceneY()));
});
// Lorsqu'on rel�che la pi�ce, le mouvement correspondant est appliqu�
// au jeu d'�checs si possible.
// L'image de la pi�ce est �galement centr�e sur la case la plus proche.
node.setOnMouseReleased(event -> {
Point2D to = new Point2D (event.getSceneX(), event.getSceneY());
Point2D from = mouseDown.get();
if(board.move(from, to)) {
node.relocate(to.getX(), to.getY());
}else {
node.relocate(from.getX(), from.getY());
}
});
} |