2013-04-28 3 views
1

J'essaie d'apprendre javafx en implémentant un petit jeu de cartes. Je suis capable de rendre une carte mobile avec la gestion des événements mousePressed- et mouseDragged-. En appuyant sur la souris, je stocke l'origine du glissement et dans l'événement déplacé par la souris, j'applique des transpositions x et y à la carte glissée. Fonctionne comme un charme et sans aucun retard. (Imousedragged dans JavaFX: détermine le nœud de la carte sur lequel un autre nœud est déplacé

Mon problème est de déterminer une autre carte (noeud) sous la carte traîné. Est-ce qu'un d'entre vous réalisé s.th. comme ça?

J'ai essayé d'éviter les calculs manuels pour vérifier les intersections.

+0

Au lieu de calculs manuels - éventuellement, Parent.impl_pickNode() peut vous aider. C'est une méthode, qui est utilisée pour déterminer le nœud, sur laquelle vient le clic. Aide-t-il? Ou votre problème est différent? –

+0

Merci pour votre réponse. Je peux utiliser votre indice pour un autre problème ;-) J'ai compris, que j'ai vraiment besoin de déterminer le nœud qui se croise avec ma carte déplacée. Dans le gestionnaire d'événement mousedragged, je parcourt chaque pile (Pane) et vérifie l'intersection. Je me demandais juste s'il y a une façon plus élégante. – FloWi

+0

Cette méthode est marquée comme obsolète, et n'est pas supposée être utilisée par les développeurs, donc c'est à votre risque ... –

Répondre

2

Il existe un mécanisme pour cette appelé « full geste presse-drag-release » les détails sont documentés au cours MouseEvent et MouseDragEvent

Fondamentalement, inscrivez-vous un gestionnaire d'événements onDragDetected sur la carte traîné et à l'intérieur font deux appels..: card.startFullDrag() qui permet la livraison de MouseDragEvents ed au geste cible card.setMouseTransparent() ce qui rend les cibles de geste cueillies par le noeud traîné

Maintenant, les événements traînaient continuent d'être livrés à la carte, et les MouseDragEvents sont livrés au noeud sélectionné en dessous. N'oubliez pas de replacer l'indicateur mouseTransparent après la fin du mouvement.

Questions connexes